在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2750|回复: 9

[求助] verilog问题

[复制链接]
发表于 2015-10-31 15:31:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 秋刀鱼91 于 2015-10-31 16:17 编辑

大家在写verilog的时候有没有遇到过这种问题,语句中我是这么写的,在en_din上升沿的时候把din赋给din_1,但是仿真出来,din_1却随din瞬时变化,我想知道什么情况下会发生这种情况?,,代码太多,不方便上传,谢谢了
QQ截图20151030171739.png
发表于 2015-10-31 17:15:25 | 显示全部楼层
回复 1# 秋刀鱼91

你要确保信号变化的先后顺序,如果是同时变化,modelsim前仿是不考虑建立时间的。
发表于 2015-11-6 22:57:25 | 显示全部楼层
前仿,没有加延迟信息,输出信号变化是看不出延迟的
发表于 2015-11-9 12:15:27 | 显示全部楼层
你很多地方没理解清楚,首先触发器是根据系统时钟来工作的,系统时钟的上升沿检测到en_din的上升沿时,din_1被打一拍,你想实现的功能应该是这样的。首先你要用时钟支检测en_din上升沿,这个写法有很多种,可以用打拍实现,也可以用其它的办法。养成良好的编码习惯,VERILOG是硬件语言,不要用C的想法去理解,规范的写法:
parameter U_DLY =1
always@(posegde clk_sys or negedge rst)
begin
  if(rst_n ==1'b0)
  begin
    din_1_1dly <= 1'b0;
  end
  else
  begin
    din_1_1dly <= # U_DLY din_1;  //延时一拍
  end
end

always@(posegde clk_sys or negedge rst)
begin
  if(rst_n ==1'b0)
  begin
    din_1 <= 8'b0
  end
  else if(en_din1 == 1'b1 && en_din1_1dly == 1'b0) //检测上升沿
begin
  din_1 <= #U_DLY din;
  end
end
 楼主| 发表于 2015-11-9 17:18:45 | 显示全部楼层
回复 3# fishkking


    我没表达清楚,我的意思就是,原本我想实现一个always的时序逻辑,仿真的时候却仿成了组合逻辑
 楼主| 发表于 2015-11-9 17:20:33 | 显示全部楼层
回复 4# xyzraincold


    恩恩,明白了,太感谢了!
发表于 2015-11-9 21:21:53 | 显示全部楼层
我也遇到这个问题了。。。。
 楼主| 发表于 2015-11-9 21:28:45 | 显示全部楼层
回复 7# qianzhuangzhuan


    那你是怎么解决的呢?
发表于 2015-11-10 11:00:08 | 显示全部楼层
出现透明寄存器,一般是因为阻塞、非阻塞赋值没用对。
 楼主| 发表于 2015-11-10 16:38:16 | 显示全部楼层
回复 9# orlye


    哦哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-20 03:54 , Processed in 0.030312 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表