Verilog
Verilog可以从五个层次对电路(系统)进行描述,包括:系统级、算法级、寄存器传输级(即RTL级)、门级、开关级。我们平时用的最多的为RTL级,故Verilog代码也经常被称为RTL代码。
基础语法
1 | Always@(posedge clk) |
凡是带有posedge或negedge的always块,都会被综合成时序逻辑电路。
reg :除wire类型外,另外一种常用的数据类型,一般表示寄存器类型数据,不过并不绝对,记住一条原则:在always块内被赋值的信号应定义成reg型,用assign语句赋值的信号应定义成wire型。
always/assign:两者都不可嵌套
assign语句只能实现组合逻辑赋值,且一个assign语句后面只能跟一条赋值表达式。
always即能实现组合逻辑赋值,又能实现时序逻辑赋值操作,且可以包含多条赋值表达式,多条赋值表达式,则应位于
begin/end对中间。
设计规则:
i:在组合逻辑电路中,使用阻塞式赋值方式”=”;
ii: 在时序逻辑电路中,使用非阻塞式赋值方式”<=”
iii:在同一个always块内,只能存在一种赋值方式。
iv:一个信号,只能在一个always或一个assign语句下赋值。
v:原则上来说,一个always块内只处理一个或一类信号,不同的信号可在不同的always块内处理。
vi: always块内只能对reg型信号进行处理,不能对wire型数据赋值,也不能实例化模块
1 | reg [7:0] mem [255:0]; // 256 unpacked elements, each of which is a 8-bit packed vector of reg. |
1-bit全加器
1 | // Full adder module here |