HDLBits (30) — Always模块(时钟)
2022-02-05 17:05 作者:僚机Wingplane | 我要投稿
本题链接:
https://hdlbits.01xz.net/wiki/Alwaysblock2
对于硬件综合,有两种类型的always块是相关的:
组合: always @(*)
时钟: always @(posedge clk)
时钟always块就像组合always块一样创建了一个组合逻辑块,但会在组合逻辑块的输出端创建一组触发器(或“寄存器”)。与逻辑 blob 的输出立即可见不同,输出只在下一个触发(clk上升沿)之后可见。
阻塞与非阻塞分配
Verilog中有三种类型的分配:
连续赋值(赋值x=y;)。只能在不在过程内部时使用(“始终块”)。
过程阻塞分配:(x=y;)。只能在过程内部使用。
过程非阻塞赋值:(x<=y;)。只能在过程内部使用。
在组合always块中,使用阻塞赋值。在时钟always块中,使用非阻塞赋值。充分理解为什么对硬件设计特别有用,于此同时还需要了解Verilog模拟器是如何跟踪事件。不遵循这一规则会导致非常难以发现的错误,这些错误既不确定,也不同于模拟硬件和合成硬件。

题目
使用assign语句、组合always块和时钟always块以三种方式构建异或门。请注意,时钟始终块产生与其他两个不同的电路:有一个触发器,因此输出延迟。


答案

输出波形
