北航verilog实验报告 下载本文

实验三 利用条件语句实现计数分频时序电路

一.实验目的:

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