实验三 利用条件语句实现计数分频时序电路
一.实验目的:
1.掌握条件语句在简单时序模块设计中的使用。
2.学习在Verilog模块中应用计数器。
3.学习测试模块的编写、综合和不同层次的仿真。 二.实验设备:
安装Modelsim-6.5c的PC机。 三.实验内容:
仿真一个可综合风格的分频器,将10MB的时钟分频为500KB的时钟,定义一个计数器,原理同1/2分频器一样,只不过分频变为1/20。
四.实验代码
module fdivision(RESET,F10M,F500K); input RESET,F10M; 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/1ps `define clk_cycle 50 module division_Top; 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 fdivision(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk)); endmodule
五.综合仿真结果
实验四 阻塞赋值与非阻塞赋值的区别
一.实验目的:
1.通过实验,掌握阻塞赋值与非阻塞赋值的概念和区别。 2.了解非阻塞和阻塞赋值的不同使用场合。 3.学习测试模块的编写、综合和不同层次的仿真。 二.实验设备:
安装Modelsim-6.5c的PC机。
三.实验内容:
两个模块,一个阻塞赋值,一个非阻塞赋值,观察两者之间的区别
四.实验代码
module blocking(clk,a,b,c); output [3:0]b,c; input [3:0]a; input clk; reg [3:0]b,c;
always @(posedge clk) begin b=a; c=b;
$display(\ end endmodule //non_blocking.v
module non_blocking(clk,a,b,c); output [3:0]b,c; input [3:0]a; input clk; reg [3:0]b,c;
always @(posedge clk) begin b<=a; c<=b;
$display(\ end endmodule
//comepareTop.v `timescale 1ns/100ps module conpareTop; wire[3:0]b1,c1,b2,c2; reg[3:0]a; reg clk; initial begin clk=0;
forever #50 clk=~clk; end initial