北航数字EDA实验1-8+数字去噪器 下载本文

reg [8:0]n; always @ (posedge F10M) if (!reset) begin clk_out<=0; n<=0; end else begin n<=n+1; if ((n==200)||(n==300)) clk_out<=~clk_out; if (n==500) n<=0; end endmodule

`timescale 1ns/100ps module three; reg clk; reg reset; wire clk_out; always #50 clk=~clk; initial begin

clk=1'b0; reset=1'b0;

#100 reset =1'b1; end fdivision m(.clk_out(clk_out),.F10M(clk),.reset(reset)); endmodule

实验仿真:

9

练习四阻塞赋值与非阻塞赋值的区别

实验目的:

(1)通过实验,掌握阻塞赋值与非阻塞赋值的概念和区别; (2)了解非阻塞和阻塞赋值的不同使用场合; (3)学习测试模块的编写、综合和不同层次的仿真

实验原理:

在教材中我们已经了解了它们之间在语法上的区别以及综合后所得到的电路结构上的区别。在always块中,阻塞赋值(=)可以理解为赋值语句是顺序执行的,而非阻塞赋值(<=)可以理解为赋值语句是并发执行的。实际的时序逻辑设计中,一般的情况下非阻塞赋值语句被更多地使用,有时为了在同一周期实现相互关联的操作,也使用了阻塞赋值语句。

实验内容:

在blocking模块中按如下两种写法,仿真和综合的结果会有什么样的泊岸花?作出仿真波形,分析仿真结果。

(1)always @(posedge clk) begin c = b; b = a; end

(2)always @(posedge clk) b=a; always @(posedge clk) c=b;

实验代码:

module ex4_1(clk,a,b,c); output [3:0] b,c; input [3:0] a; input clk; reg [3:0] b,c;

always @(posedge clk) begin c = b; b = a; end

10

endmodule

module ex4_2(clk,a,b,c); output [3:0] b,c; input [3:0] a; input clk; reg [3:0] b,c;

always @(posedge clk) b=a; always @(posedge clk) c=b;

endmodule

`timescale 1ns/100ps

module four;

wire [3:0] b1,c1,b2,c2; reg [3:0] a; reg clk;

initial begin clk = 0;

forever #50 clk = ~clk; end

initial begin

a = 4'h3;

$display(\ # 100 a = 4'h7;

$display(\ # 100 a = 4'hf;

$display(\ # 100 a = 4'ha;

$display(\ # 100 a = 4'h2;

$display(\

# 100 $display(\ $stop; end

ex4_1 m1 (clk,a,b1,c1); ex4_2 m2 (clk,a,b2,c2);

11

endmodule

实验仿真:

12