verilog程序分析

verilog程序分析,第1张

1. case语句第一条

casez ({present_state, coin_in, detect_car, reset})

{STATE_BLOCKING, 3'b1?0}:

begin

boom_up = UP

next_state = STATE_RECEIVING

end

对应状态图:

含义:当栏杆处于“阻隔”(blocking)状态时,只要发现刷卡(coin_in=1),则抬起栏杆(boom_up=1),下一个状态即进入到放行(receiving)状态;

2. case语句第二条

{STATE_BLOCKING, 3'b0?0}:

begin

boom_up = DOWN

next_state = STATE_BLOCKING

end

对应状态图:

含义:当栏杆处于“阻隔”(blocking)状态时,如果没有恢复初始状态信号(reset=0),也没有刷卡(coin_in=0),则无论有没有检测到汽车(detect_car=x),栏杆都保持放下(boom_up=0),下一个状态保持原来的“阻隔”(blocking)状态。

3. case语句第三条

{1'b?, 3'b??1}:

begin

boom_up = DOWN

next_state = STATE_BLOCKING

end

对应状态图:

含义:不管原来状态是什么,只要恢复初始状态信号有效(reset=1),则栏杆保持放下(boom_up=0),下一个状态保持原来的“阻隔”(blocking)状态。

4. case语句第四条

{STATE_RECEIVING, 3'b?00}:

begin

boom_up = UP

next_state = STATE_RECEIVING

end

对应状态图:

含义:放行状态下,无论有没有刷卡(coin_in=x),只要没有检测到汽车(car_detect=0),没有reset信号,则栏杆保持抬起(boom_up=1),下一个状态保持原来的“放行”(receiving)状态。

5. case语句第五个状态

{STATE_RECEIVING, 3'b?10}:

begin

boom_up = DOWN

next_state = STATE_BLOCKING

end

对应状态图:

含义:放行状态下,无论有没有刷卡(coin_in=x),如果检测到汽车(car_detect=1),没有reset信号,则栏杆放下(boom_up=0),下一个状态进入到“阻隔”(blocking)状态。

关于时序逻辑解释:

always @(posedge clock)

begin

present_state <= next_state

end

含义:在时钟的上升沿,将组合逻辑完成的下一个状态(next_state,组合逻辑电路输出)保存进状态寄存器(present_state,时序逻辑输出)

当b=0的时候a的值为0,当b=1时,a的值取决于c,d的值,当c=1,d=1时a的值等于1,当c=1,d=0或者c=0,d=1或者c=0,d=0时a的值为0。

首先会判断b的值是否等于1,等于0,则直接对a进行赋值为0,如果b的值为1,那么会执行(c &&d) ? 1'b1:1'b0,然后根据c&&d的结果判断赋值的结果,当c=1,d=1,时a赋值为1,其他情况都赋值为0。

扩展资料:

Verilog是一种大小写敏感的硬件描述语言。其中,它的所有系统关键字都是小写的。

Verilog具有一些编译指令,它们的基本格式为`<keyword>,注意第一个符号不是单引号,而是键盘上数字1左边那个键对应的撇号。常用的编译指令有文本宏预定义`define、`include,它们的功能与C语言中类似,分别提供文本替换、文件包含的功能。

三目运算符“表达式1?表达式2:表达式3”,的执行为,先判断表达式1的结果,结果为真执行表达式2,否则执行表达式3。

Verilog还允许设计人员为每个延迟时间设置最大值、典型值、最小值,在编译阶段可以通过编译代码选择其中一个。

参考资料来源:百度百科-VerilogHDL


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8001370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存