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

begin a = 8'b00000100; b = 8'b00000010; #200 a = 8'b00001111; b = 8'b11110000; #200 a = 8'b01010101; b = 8'b01010101; #200 $stop; end compare m (.out (out), .a(a), .b(b));

endmodule

实验仿真:

5

练习二简单分频时序逻辑电路的设计

实验目的:

(1)掌握最基本时序电路的实现方法 (2)学习时序电路测试模块的编写 (3)学习综合和不同层次的仿真

实验原理:

对于组合逻辑电路,可综合成具体电路结构的时序逻辑电路也有准确的表达方式。在可综合的模型中,通常用always块或者@(posedgeclk)或(negedgeclk)结构表达时序逻辑。实验为二分之一分频器模型。

在always块中,被赋值信号都必须定义为reg型,对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态的。为了正确观察结果,在可综合模块中,常定义一个复位信号reset,其为低电平时对寄存器进行复位。

实验内容:

依然作clk_in的2分频clk_out,要求输出时钟的相位与上面的的1/2分频器的输出正好相反。

实验代码:

module half_clk (reset,clk_in,clk_out); input reset; input clk_in; output clk_out; reg clk_out; always @ (posedge clk_in) if (!reset) clk_out<=1'b1; else clk_out<=~clk_out; endmodule

`timescale 1ns/100ps `define clk_cycle 50

module two;

6

reg clk,reset; wire clk_out;

always #`clk_cycle clk=~clk;

initial begin

clk=0; reset=1; #10 reset=0; #110 reset=1; #100000 $stop; end

half_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out));

endmodule

实验仿真:

7

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

实验目的:

(1)掌握条件语句在简单时序模块设计中的使用 (2)学习在Verilog模块中应用计数器

(3)学习测试模块的编写、综合和不同层次的仿真

实验原理:

在可综合的Verilog HDL模型中,常用的条件语句有if ?else和case?endcase两种结构,用法和C语言相似。

1. if语句

(1) if(表达式)语句 (2) if(表达式)语句1 else语句2

(3) if(表达式1)语句1;

else if(表达式2)语句2; else if(表达式3)语句3; …… 2. case语句

(1)case(表达式)endcase (2)casez(表达式)endcase (3)casex(表达式)endcase 前者用于不太复杂的分支关系,实际编写模块时常用的是后者。实验代码是一个可综合风格的分频器,可将10M时钟分频为500K,基本原理和二分之一分频器类似,但需要定义一个计数器以准确获得1/20分频。

实验内容:

利用10M的时钟,设计一个单周期形状的周期波形。

实验代码:

module fdivision(clk_out,F10M,reset); output clk_out; input reset; input F10M; reg clk_out;

8