1、case语句
case(表达式)
选择值1: 语句1
选择值2: 语句2
……
选择值n: 语句n
defult: 语句n+1
endcase
case语句表述4选1数选器
module example_4_1(z,a,b,c,d,s1,s2);
input s1,s2;//默认为wire类型
input a,b,c,d;
output z;
reg z;//reg类型,因为z要在下面的过程语句中赋值
always@(s1 or s2 or a or b or c or d)//a,b,c,d,s1,s2任意一个改变都会导致触发语句
begin
case ({s1,s2})//位拼接,拼成两位二进制数
2'b00: z=a;
2'b01: z=b;
2'b10: z=c;
2'b11: z=d;
default: z=a;//建议保留,防止程序跑飞,也防止生成锁存器
endcase
end
endmodule
case casez casex的区别
①case语句中每个值都是确定的0or1
②casez中有高阻值,不考虑有高阻值位的比较
③casex有z或者不定值x,则不考虑这些的比较
④可用“?”来标识x或z
注意:防止生成锁存器,用了if语句就加上else,用了case语句就加上default
2、循环语句
for、repeat、while、forever
利用循环语句可以描述奇偶校验器。将最高位与次高位相异或,再将得到的值与下一位异或,重复多次,便可得到0或1,得0说明有偶数个1,得1说明有奇数个1。
①for格式
for(循环指针=初值;循环指针<终值;循环指针=循环指针+步长值)
begin
语句;
end
②repeat
repeat(循环次数表达式) 语句
或者repeat(循环次数表达式) begin 语句; end。
begin……end之间是多条语句时,不省略,只有一条时可省。
③while
while(循环执行条件语句)
begin
重复执行语句;
修改循环条件语句;
end
④forever
无条件连续执行forever后的语句
格式为
forever
begin
……
end
常用于测试模块中产生周期性波形,作为仿真激励信号。一般用在initial语块中,用disable跳出循环。如:
initial
begin:Clocking//块名字
clk=0;
#10 forever #10 clk=!clk;//每隔10ns执行forever 内部也是每隔10ns取反一次
initial
begin:Stimulus
……
disable Clocking;//停止时钟
end
3、任务和函数
task 任务名
端口声明和类型说明;
局部变量说明;
begin
说明语句;
end
endtask
要写在一个module内部
function<位宽> 函数名
端口声明和类型说明;
局部变量说明;
块语句
endfunction
说明:函数不能调用任务,任务可调用函数和任务
函数有输入变量且至少一个
函数中块语句不能出现定时控制
函数通过函数名返回一个值