#10000 $stop; end segdisplay segdisplay11(.data(data),.seg(out)); endmodule
四、仿真结果
五、实验总结
在每个上升沿data自加,依次从0000加到1111,在把其对应代表七段数码管abcdefg亮暗的7位二进制数赋值给paraseg,即输出out。
11 / 19
练习三:利用条件语句实现计数分频时序电路
一、实验目的
1、掌握条件语句在简单时序模块设计中的使用。 2、学习在Verilog模块中应用计数器。
3、学习测试模块的编写、综合和不同层次的仿真。
二、实验设备
安装Modelsim-6.5c的PC机。
三、实验内容
仿真一个可综合风格的分频器,将10MB的时钟分频为500KB的时钟,定义一个计数器,原理同1/2分频器一样,只不过分频变为1/20。
四、实验代码 ①模块源代码
module fdivision(RESET,F10M,F500K); input F10M,RESET; output F500K; reg F500K;
reg[7:0]j;
always@(posedge F10M) if(!RESET) begin
F500K<=0; j<=0; end else begin if(j==9) begin j<=0;
F500K<=~F500K; end else
j<=j+1; end endmodule ②测试程序
`timescale 1ns/100ps `define clk_cycle 50 module test_fdivision; reg F10M,RESET; wire F500K_clk;
always #`clk_cycle F10M=~F10M; initial begin
RESET=1; F10M=0;
#100 RESET=0; #100 RESET=1; #10000 $stop; end
fdivision m(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk));
12 / 19
endmodule
五、仿真结果
六、实验总结
我们按照课本上的程序进行了仿真,从仿真结果中可以看到,结果所得的信号的周期是原信号的20倍,即实现了1/20分频。
13 / 19
选作三:设计一个单周期形状的周期波形
一、实验目的
利用10MHZ的时钟,设计一个单周期形状的周期波形。
二、实验设备
安装Modelsim-6.5c的PC机。
三、实验代码 ①模块源代码
module exp3(RESET,F10M,F_OUT); input F10M,RESET; output F_OUT; reg F_OUT; reg[15:0]j;
always@(posedge F10M) if(!RESET)//??? begin
F_OUT<=0; j<=0;//?? end else begin j<=j+1; case(j)
199:F_OUT<=1; 299:F_OUT<=0; 499:j<=0; endcase end endmodule ②测试程序
`timescale 1ns/100ps `define clk_cycle 50 module test_exp3; reg F10M,RESET; wire F; always
#`clk_cycle F10M=~F10M; initial begin
RESET=1; F10M=0;
#100 RESET=0; #100 RESET=1; #50000 $stop; end
exp3 m2(.RESET(RESET),.F10M(F10M),.F_OUT(F)); endmodule
四、仿真结果
14 / 19
五、实验总结
这个实验只需要把练习三中的程序稍加修改即可得到结果。在实验的过程,一开始我们预设的stop的持续时间太短,导致输出不到一个周期,让我们误以为编写的程序有逻辑问题,从而耽误了很多时间。后来我们根据波形的高低电平持续时间重新计算了步长,根据步长进行时钟翻转的设置,最终得到了正确的结果。
15 / 19
北航电子电路设计verilog实验报告
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)