Verilog assign和always 注意事宜

[复制链接]
2883|12
 楼主| FangTT 发表于 2013-1-30 22:34 | 显示全部楼层 |阅读模式
assign 用于描述组合逻辑
always@(敏感事件列表) 用于描述时序逻辑
敏感事件 上升沿 posedge,下降沿 negedge,或电平
敏感事件列表中可以包含多个敏感事件,但不可以同时包括电平敏感事件和边沿敏感事件,也不可以同时包括同一个信号的上升沿和下降沿,这两个事件可以合并为一个电平敏感事件。
在新的verilog2001中“,”和“or”都可以用来分割敏感事件了,可以用“*”代表所有输入信号,这可以防止遗漏。
合法的写法:
always@ *
always@ (posedge clk1,negedge clk2)
always@ (a or b)
`timescale 100ns/100ns //定义仿真基本周期为100ns
always #1 clk=~clk //#1代表一个仿真周期即100ns

所有的assign 和 always 块都是并行发生的!
并行块、顺序块
将要并行执行的语句写在
fork
//语句并行执行
join
将要顺序执行的语句写在
begin
//语句顺序执行
end
并行块和顺序块都可以写在
initial 或 always@ 之后,也就是说写在块中的语句是时序逻辑的
对assign之后不能加块,实现组合逻辑只能用逐句的使用assign
组合逻辑如果不考虑门的延时的话当然可以理解为瞬时执行的,因此没有并行和顺序之分,并行和顺序是针对时序逻辑来说的。值得注意的是所有的时序块都是并行执行的。initial块只在信号进入模块后执行1次而always块是由敏感事件作为中断来触发执行的
GoldSunMonkey 发表于 2013-1-30 22:58 | 显示全部楼层
感谢分享,非常不错啊
charlydady 发表于 2013-2-1 08:54 | 显示全部楼层
always也可以实现组合逻辑哦
charlydady 发表于 2013-2-1 08:55 | 显示全部楼层
敏感变量不用时钟沿,用阻塞赋值
qin552011373 发表于 2013-2-1 20:09 | 显示全部楼层
不会verilog   我是不是文盲了。。。。。
Backkom80 发表于 2013-2-5 08:13 | 显示全部楼层
楼主的对第二句写的很模糊,会让人读了有误解的地。

时序逻辑和组合逻辑的区分是以触发条件的方式来区分的,不是以用always  还是 assign来区分的。

always@(敏感事件列表) 可以用于描述时序逻辑,也可以用于表组合逻辑,主要取决于敏感事件列表的触发方式。
GoldSunMonkey 发表于 2013-2-5 22:33 | 显示全部楼层
Backkom80 发表于 2013-2-5 08:13
楼主的对第二句写的很模糊,会让人读了有误解的地。

时序逻辑和组合逻辑的区分是以触发条件的方式来区分的 ...

分享的很好啊
Backkom80 发表于 2013-2-6 08:51 | 显示全部楼层
GoldSunMonkey 发表于 2013-2-5 22:33
分享的很好啊

GoldSunMonkey 发表于 2013-2-13 23:33 | 显示全部楼层
Backkom80 发表于 2013-2-16 09:14 | 显示全部楼层
yibiantian 发表于 2013-2-18 19:52 | 显示全部楼层
顶一个
linhaiqing60 发表于 2013-2-20 10:59 | 显示全部楼层
楼主,你能写几个例程贴出代码,并且综合出电路试图截图出来给大家看,这样子会更有效果,光看理论的东西,看懂了也不容易吸收。
 楼主| FangTT 发表于 2013-3-18 17:14 | 显示全部楼层
linhaiqing60 发表于 2013-2-20 10:59
楼主,你能写几个例程贴出代码,并且综合出电路试图截图出来给大家看,这样子会更有效果,光看理论的东西, ...

嘿嘿,这个要靠自己体会的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

172

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部