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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)