预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共78页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

2024/11/73.4VerilogHDL行为语句3.4.1赋值语句过程赋值过程赋值连续赋值语句过程赋值和连续赋值的区别begin 执行语句1; 执行语句2; …….. end并行块顺序块和并行块程序执行过程的区别3.4.3结构说明语句一个模块中可以包含多个initial语句,所有的initial语句都同时从0时刻开始并行执行,但是只能执行一次。 initial语句常用于测试文本中信号的初始化,生成输入仿真波形,监测信号变化等。 也可以使用fork…join对语句进行组合。always语句任务(task)moduletop; …….. //例化一个fifo fifoctlr_ccu1(.clock_in(clockin),.write_enable(write_enable),write_data(write_data),read_enable(read_enable).……); taskwriteburst; input[7:0]wdata; begin always@(posedgeclockin) begin write_enable=#21; write_data=#2wdata; end end endtask函数(function)3.4.4条件语句课堂练习课堂练习case语句例3-42:用case语句实现四选一电路 modulemux4(clk,rst,data_in1,data_in2,data_in3,data_in4,select,data_out); input[3:0]data_in1,data_in2,data_in3,data_in4; input[1:0]select; inputclk,rst; output[3:0]data_out; reg[3:0]data_out; always@(posedgeclk) if(rst)data_out<=4'b0000; else case(select) 2'b00:data_out<=data_in1; 2‘b01:data_out<=data_in2; 2'b10:data_out<=data_in3; 2'b11:data_out<=data_in4; default:$display("thecontrolsignalisinvalid"); endcase endmodule3.4.5循环语句for语句while语句例3-45:用while语句求从1加到100的值,加法完成后打印结果语句格式: forever 语句; 表示永久循环,无条件地无限次执行其后的语句,相当于while(1),直到遇到系统任务$finish或$stop 不能独立写在程序中,必须写在initial结构中。 repeat语句modulemux(data_in1,data_in2,data_out); input[3:0]data_in1,data_in2; output[7:0]data_out; reg[7:0]data_out; reg[7:0]data_in1_shift,data_in2_shift; initial begin data_in1_shift=data_in1;data_in2_shift=data_in2;data_out=0; repeat(4) begin if(data_in2_shift[0])data_out=data_out+data_in1_shift; data_in1_shift=data_in1_shift<<1; data_in2_shift=data_in2_shift>>1; end end endmodule 系统任务和系统函数$display$monitor在整个仿真过程中,在任意一个时刻,只要监测的一个或多个变量发生变化时,就会启动$monitor函数,输出这一时刻的数值情况。 例: initial$monitor($time,”a=%b,b=%h”,a,b); /*每当a或b值变化时该系统任务都显示当前的仿真时刻并分别用二进制和十六进制显示信号a和b的值*/ $monitor函数一般书写在initial块中,即,只需调用一次$monitor函数,在整个仿真过程中都有效,这与$display不同。 在仿真过程中,若在源程序中调用了多个$monitor函数,只有最后一个调用有效。 Verilog语言提供了两个用于控制监控函数的系统任务$monitoron,$monitoroff,$monitoron用于启动监控任务,$monitoroff用于关闭监控任务。$stop和$finish$readmemb和$readmemh数据文件中可以用@<地址>将数据存入存储器的指定位置,地址用十六进制数表