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,时序逻辑输出)

读懂一个Verilog工程代码主要通过以下方面:

1、区分好结构,一个工程是由基本的顶层、模块、约束等部分组成的,通常模块都是在顶层中逐一实例化,所以,了解一个工程的结构就是从顶层逐一向下延伸,相当于植物的根系,最底层的模块往往是被“引用”最多的,也是最基础的构成。

2、通过代码注释来辅助阅读,一段好的代码必须有70%~80%的注释,方便进行工作交接,以及多人讨论。重点通过代码结合注释,看懂工程师的意图,查找设计不严谨的地方。

3、verilog代码实际上就是在画电路图,是一种硬件描述语言,在读代码的同时,头脑中要有电路的概念,知道电路的大概结构是什么样的,每个模块的扇入扇出等。

当然,最基本的还是对语法和原理要有较好的基础,否则,很难看懂一些大规模的电路描述。


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

原文地址: https://outofmemory.cn/yw/7888910.html

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

发表评论

登录后才能评论

评论列表(0条)

保存