《Verilog数字系统设计教程》第4版——夏宇闻
一、条件语句
- if_else语句
条件语句必须在过程块语句中使用,所谓过程块语句是指由initial和always语句引导的执行语句集合,除这两种块语句引导的begin end块中可以编写条件语句外,模块中的其他地方都不能编写。
- case语句
case语句是一种多分支选择语句,Verilog HDL针对电路的特性提供了case语句的其他两种形式,即casez和casex,这可用来处理比较过程中的不必多虑的情况。其中casez用来处理不考虑高阻值z的比较过程,casex语句则将高阻值z和不定值都视为不必关心的情况。
使用条件语句不当在设计中会生成原本没想到有的锁存器,为避免这一现象发生,如果用到if语句,最好写上else项,如果用case语句,最好写上default项,遵循上面两条原则,就可以避免发生这种错误,使设计者更加明确设计目标,同时增加了verilog程序的可读性。
使用case语句实现四选一多路选择器:
module mux4_to_1(out,i0,i1,i2,i3,s1,s0);
output out;
input i0,i1,i2,i3;
input s1,s0;
reg out;
always @(s1 or s0 or i0 or i1 or i2 or i3)
begin
case({
s1,s0})
2'b00:out = i0;
2'b01:out = i1;
2'b10:out = i2;
2'b11:out = i3;
default:out = 1'bx;
end
endmodule
二、循环语句
- forever语句
连续的执行语句,forever循环语句常用于产生周期性的波形,用来作为仿真测试信号,它与always语句不同之处在于不能独立写在程序块中,而必须写在initial块中。
- repeat语句
连续执行一条语句n次,使用repeat循环语句及加法和移位操作来实现一个乘法器代码如下:
parameter size = 8