当前位置:文档之家› 北航电子电路设计数字部分实验报告.doc

北航电子电路设计数字部分实验报告.doc

电子电路设计数字部分实验报告学院:姓名:实验一简单组合逻辑设计实验内容描述一个可综合的数据比较器,比较数据 a 、b 的大小,若相同,则给出结果1,否则给出结果 0。

实验仿真结果实验代码主程序module compare(equal,a,b);input[7:0] a,b;output equal;assign equal=(a>b)1:0;endmodule测试程序module t;reg[7:0] a,b;reg clock,k;wire equal;initialbegina=0;b=0;clock=0;k=0;endalways #50 clock = ~clock; always @ (posedge clock) begina[0]={$random}%2;a[1]={$random}%2;a[2]={$random}%2;a[3]={$random}%2;a[4]={$random}%2;a[5]={$random}%2;a[6]={$random}%2;a[7]={$random}%2;b[0]={$random}%2;b[1]={$random}%2;b[2]={$random}%2;b[3]={$random}%2;b[4]={$random}%2;b[5]={$random}%2;b[6]={$random}%2;b[7]={$random}%2;endinitialbegin #100000 $stop;endcompare m(.equal(equal),.a(a),.b(b));endmodule实验二简单分频时序逻辑电路的设计实验内容用 always 块和 @(posedge clk) 或 @(negedge clk) 的结构表述一个 1/2 分频器的可综合模型,观察时序仿真结果。

实验仿真结果实验代码主程序module half_clk(reset,clk_in,clk_out); input clk_in,reset;output clk_out;reg clk_out;always@(negedge clk_in)beginif(!reset)clk_out=0;elseclk_out=~clk_out;endendmodule测试程序`timescale 1ns/100ps`define clk_cycle 50module top;reg clk,reset;wire clk_out;always #`clk_cycle clk=~clk;initialbeginclk=0;reset=1;#10 reset=0;#110 reset=1;#100000 $stop;endhalf_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out));endmodule实验三利用条件语句实现计数分频时序电路实验内容利用 10MHz的时钟,设计一个单周期形状的周期波形。

实验仿真结果实验代码主程序module fdivision(RESET,F10M,out); input F10M,RESET;output out;reg out;reg[7:0] i;always @(posedge F10M)if(!RESET)beginout<=0;i<=0;endelse if(i==2||i==3)beginout=~out;i<=i+1;endelse if(i==5)i<=1;elsei<=i+1;endmodule测试程序`timescale 1ns/100psmodule division_top;reg F10M,RESET;wire out;always #50 F10M=~F10M;initialbeginRESET=1;F10M=0;#90 RESET=0;#100 RESET=1;#10000 $stop;endfdivision fdivision(.RESET(RESET),.F10M(F10M),.out(out));endmodule实验四阻塞赋值与非阻塞赋值的区别实验内容比较四种不同的写法,观察阻塞与非阻塞赋值的区别。

Blocking :always @(posedge clk)beginb=a;c=b;endBlocking1 :always @(posedge clk) beginc=b;b=a;endBlocking2 :always @(posedge clk) b=a; always @(posedge clk) c=b; non_Blocking :always@(posedge clk) beginb<=a;c<=b;End实验仿真结果实验代码主程序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)beginb=a;c=b;endendmodule测试部分`timescale 1 ns/100 ps`include "./"`include "./"`include "./"`include "./"module compareTop;wire[3:0]b11,c11,b12,c12,b13,c13,b2,c2; reg[3:0]a;reg clk;initialbeginclk=0;forever#50 clk=~clk;endinitialbegina=4'h3;$display("%d",a);#100 a=4'h7;$display("%d",a);#100 a=4'hf;$display("%d",a);#100 a=4'ha;$display("%d",a);#100 a=4'h2;$display("%d",a);#100 $stop;endblocking blocking(clk,a,b11,c11); blocking1 blocking1(clk,a,b12,c12); blocking2 blocking2(clk,a,b13,c13);non_blocking non_blocking(clk,a,b2,c2); endmodule实验五用 always 块实现较复杂的组合逻辑实验目的运用 always 块设计一个8 路数据选择器。

要求:每路输入数据与输出数据均为 4 位 2 进制数,当选择开关(至少 3 位)或输入数据发生变化时,输出数据也相应地变化。

实验仿真结果实验代码主程序module alu(out,opcode,a1,a2,a3,a4,a5,a6,a7,a8);output[3:0] out;reg[3:0] out;input[3:0] a0,a1,a2,a3,a4,a5,a6,a7;input[2:0] opcode;always@(opcode or a1 or a2 or a3 or a4 or a5 or a6 or a7 or a0) begincase(opcode)3'd0: out=a0;3'd1: out=a1;3'd2: out=a2;3'd3: out=a3;3'd4: out=a4;3'd5: out=a5;3'd6: out=a6;3'd7: out=a7;default:out=4'b0000;endcaseendendmodule测试程序`timescale 1ns/1ns`include "./"module alutext;wire[3:0] out;reg[3:0] a1,a2,a3,a4,a5,a6,a7,a8;reg[2:0] opcode;initialbegina1={$random}%16;a2={$random}%16;a3={$random}%16;a4={$random}%16;a5={$random}%16;a6={$random}%16;a7={$random}%16;a8={$random}%16;repeat(100)begin#100 opcode={$random}%8;a1={$random}%16;a2={$random}%16;a3={$random}%16;a4={$random}%16;a5={$random}%16;a6={$random}%16;a7={$random}%16;a8={$random}%16;end#100 $stop;endalu alu(out,opcode,a1,a2,a3,a4,a5,a6,a7,a8); endmodule实验六在 Verilog HDL中使用函数实验目的设计一个带控制端的逻辑运算电路,分别完成正整数的平方、立方和最大数为5 的阶乘运算。

实验仿真结果实验代码主程序module tryfunct(clk,n,result1,result2,result3,reset);output[31:0]result1,result2,result3;input[3:0]n;input reset,clk;reg[31:0]result1,result2,result3;always@(posedge clk)beginif(!reset)beginresult1<=0;result2<=0;result3<=0;endelsebeginresult1<=fun1(n); result2<=fun2(n); result3<=fun3(n); endendfunction[31:0]fun1; input[3:0]operand;fun1=operand*operand; endfunctionfunction[31:0]fun2; input[3:0]operand; beginfun2=operand*operand; fun2=operand*fun2; endendfunctionfunction[31:0]fun3; input[3:0]operand;beginfun3=1;if(operand<11)for(index=2;index<=operand;index=index+1)fun3=index*fun3;elsefor(index=2;index<=10;index=index+1)fun3=index*fun3;endendfunctionendmodule测试程序`include"./"`timescale 1ns/100psmodule tryfunctTop;reg[3:0] n,i;reg reset,clk;wire[31:0]result1,result2,result3;initialbeginclk=0;n=0;reset=1;#100 reset=0;for(i=0;i<=15;i=i+1)begin#200 n=i;end#100 $stop;endalways#50 clk=~clk;tryfunctm(.clk(clk),.n(n),.result1(result1),.result2(result2),.result3(result3),.reset(reset));endmodule实验七在 Verilog HDL中使用任务 (task) 实验目的用两种不同方法设计一个功能相同的模块,该模块能完成四个8 位 2 进制输入数据的冒泡排序。

相关主题