武汉大学数电仿真实验报告.docx
《武汉大学数电仿真实验报告.docx》由会员分享,可在线阅读,更多相关《武汉大学数电仿真实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
武汉大学数电仿真实验报告
数电仿真实验
学院:
电气工程学院
姓名:
学号:
201
目录
实验一1位全加器的设计3
一、实验目的:
3
二、实验原理:
3
三、实验程序3
四、仿真结果3
实验二四位全加器的设计5
一、实验目的:
5
二、实验原理:
5
三、实验程序5
四、仿真结果5
实验三三输入与门、三输入或门7
一、实验目的:
7
二、实验原理7
三、实验程序7
四、仿真结果8
实验四8-3优先编码器9
一、实验目的:
9
二、实验原理:
9
三、实验程序9
四、仿真结果9
实验五3-8译码器11
一、实验目的:
11
二、实验原理:
11
三、实验程序:
11
四、仿真结果11
实验六八位十进制频率计实验13
一、实验目的:
13
三、实验程序13
四、实验波形16
实验一1位全加器的设计
一、实验目的:
1.掌握quarters软件使用流程。
2.初步掌握verilog的编程方法。
二、实验原理:
一位全加器的真值表如下:
a
b
C1
Sum
Ch
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
一位全加器的逻辑表达式为:
Sum=a^b^c1
Ch=a&b\(a^b)&c1
三、实验程序
modulefulladder(a,b,c1,ch,sum);
inputa,b,c1;
outputch,sum;
regch,sum;
always@(aorborc1)
begin
sum=a^b^c1;
ch=a&b|(a^b)&c1;
end
endmodule
四、仿真结果
实验二四位全加器的设计
一、实验目的:
1.掌握图形层次设计方法;
2.熟悉QuartusII8.0软件的使用及设计流程;
3.掌握全加器原理,能进行多位加法器的设计;
二、实验原理:
加法器是数字系统的基本逻辑器件。
例如:
为了节省资源,减法器和硬件乘法器都可由加法起来构成。
多位加法器的构成有两种方式:
并行进位和串行进位方式。
并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。
通常,并行加法器比串行加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。
4位二进制并行加法器和串行级联加法器占用几乎相同的资源。
这样,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择,因此本实验中的4位加法器采用4个1位二进制并行加法器级联而成。
三、实验程序
moduletriplegate(a,b,c,out1,out2);
inputa,b,c;
outputout1,out2;
regout1,out2;
always@(aorborc)
begin
out1=a&b&c;
out2=a^b^c;
end
endmodule
四、仿真结果
实验三三输入与门、三输入或门
一、实验目的:
1.理解简单组合电路设计方法。
2.掌握基本门电路的应用。
二、实验原理
1.三输入与门真值表
A
B
C
OUT
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
0
2。
三输入或门真值表
A
B
C
OUT
0
0
0
0
0
0
1
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
1
3.三输入与门输出:
out=a&b&c;
三输入或门输出:
out=a^b^c;
三、实验程序
moduleymhhm(a,b,c,x,y);
inputa,b,c;
outputx,y;
regx,y;
always@(aorborc)
begin
x=a&b&c;
y=a^b^c;
end
endmodule
四、仿真结果
实验四8-3优先编码器
一、实验目的:
1、熟悉常用编码器的功能逻辑。
2、熟悉VERILOG的代码编写方法。
二、实验原理:
8-3优先编码器的真值表
X1
X2
X3
X4
X5
X6
X7
X8
Y2
Y1
Y0
X
X
X
X
X
X
0
X
0
0
0
X
X
X
X
X
0
1
X
0
0
1
X
X
X
X
0
1
1
X
0
1
0
X
X
X
0
1
1
1
X
0
1
1
X
X
0
X
1
0
0
X
0
1
1
1
1
X
1
0
1
0
1
1
1
1
1
1
X
1
1
0
1
1
1
1
1
1
1
X
1
1
1
逻辑表达式:
Y2=X4&X5&X6&X7;
Y1=~(~(X2)&X4&X5|~(X3)&X4&X5|~(X6)|~(X7));
Y0=~(~(X1)&X2&X4&X6|~(X3)&X4&X6|~(X5)&X6|~(X7));
三、实验程序
moduleencode(X1,X2,X3,X4,X5,X6,X7,X8,Y2,Y1,Y0);
inputX1,X2,X3,X4,X5,X6,X7,X8;
outputY2,Y1,Y0;
regY2,Y1,Y0;
always@(X1orX2orX3orX4orX5orX6orX7orX8)
begin
Y2=X4&X5&X6&X7;
Y1=~(~(X2)&X4&X5|~(X3)&X4&X5|~(X6)|~(X7));
Y0=~(~(X1)&X2&X4&X6|~(X3)&X4&X6|~(X5)&X6|~(X7));
end
endmodule
四、仿真结果
实验五3-8译码器
一、实验目的:
1、熟悉常用译码器的功能逻辑
2、掌握复杂译码器的设计方法
二、实验原理:
G1、G2、G3为使能端、A、B、C为输入端,Y0-Y7为输出端;
3-8译码器的真值表:
A
B
C
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
0
0
0
0
1
1
1
1
1
1
1
0
0
1
1
0
1
1
1
1
1
1
0
1
0
1
1
0
1
1
1
1
1
0
1
1
1
1
1
0
1
1
1
1
1
0
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
0
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
三、实验程序:
moduledencode(A,B,C,Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7);
inputA,B,C;
outputY0,Y1,Y2,Y3,Y4,Y5,Y6,Y7;
regY0,Y1,Y2,Y3,Y4,Y5,Y6,Y7;
always@(AorBorC)
begin
Y0=A^B^C;
Y1=A^B^~C;
Y2=A^~B^C;
Y3=A^~B^~C;
Y4=~A^B^C;
Y5=~A^B^~C;
Y6=~A^~B^C;
Y7=~A^~B^~C;
end
endmodule
四、仿真结果
实验六八位十进制频率计实验
一、实验目的:
1、进一步了解VERILOG语言功能
2、了解EDA在高频工作下的优势,这是单片机无法比拟的
二、实验原理:
采用一个标准的基准时钟,在单位时间如1s里对被测信号的脉冲数进行计数,即为信号的频率。
8位数字频率计的顶层框图如图所示,整个系统可分为4个模块:
控制模块、计数测量模块、锁存器模块和显示模块。
teten
计数
模块
显示
模块
锁存器
控制
模块
待测信号
load
锁存
load
标准时钟
clrcnt
三、实验程序
十进制计数器CNT10程序:
libraryieee;
useieee.std_logic_1164.all;
entitycnt10isport(clk:
instd_logic;
clr:
instd_logic;
ena:
instd_logic;
cq:
outintegerrange0to9;
carry_out:
outstd_logic);
endcnt10;
architecturebehavofcnt10issignalcqi:
integerrange0to9;
beginprocess(clr,clk,ena)
begin
if(clr='1')thencqi<=0;
elsif(clk'eventandclk='1')then
if(ena='1')then
if(cqi=9)then
cqi<=0;
carry_out<='1';
else
cqi<=cqi+1;
carry_out<='0';
endif;
endif;
endif;endprocess;cq<=cqi;
endbehav;
32位锁存器REG32B程序:
libraryieee;
useieee.std_logic_1164.all;
entityreg32bisport(load:
instd_logic;
rst:
instd_logic;
din:
instd_logic_vector(31downto0);
dout:
outstd_logic_vector(31downto0));
endreg32b;
architecturebehavofreg32bis
signaldata:
std_logic_vector(31downto0);
beginprocess(rst,load)
begin
ifrst='1'thendata<=(others=>'0');
elsif(load'eventandload='1')thendata<=din;
endif;
dout<=data;endprocess;endbehav;
数码管译码显示DELED的程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDELEDISPORT(S:
INSTD_LOGIC_VECTOR(3DOWNTO0);A,B,C,D,E,F,G,H:
OUTSTD_LOGIC);
ENDDELED;
ARCHITECTUREBEHAVOFDELEDISSIGNALDATA:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALDOUT:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGINDATA<=S;
PROCESS(DATA)
BEGINCASE
DATAISWHEN"0000"=>DOUT<="00111111";
WHEN"0001"=>DOUT<="00000110";
WHEN"0010"=>DOUT<="01011011";
WHEN"0011"=>DOUT<="01001111";
WHEN"0100"=>DOUT<="01100110";
WHEN"0101"=>DOUT<="01101101";
WHEN"0110"=>DOUT<="01111101";
WHEN"0111"=>DOUT<="00000111";
WHEN"1000"=>DOUT<="01111111";
WHEN"1001"=>DOUT<="01101111";
WHEN"1010"=>DOUT<="01110111";
WHEN"1011"=>DOUT<="01111100";
WHEN"1100"=>DOUT<="00111001";
WHEN"1101"=>DOUT<="01011110";
WHEN"1110"=>DOUT<="01111001";
WHEN"1111"=>DOUT<="01110001";
WHENOTHERS=>DOUT<="00000000";
8ENDCASE;
ENDPROCESS;
H<=DOUT(7);
G<=DOUT(6);
F<=DOUT(5);
E<=DOUT(4);
D<=DOUT(3);
C<=DOUT
(2);
B<=DOUT
(1);
A<=DOUT(0);
ENDBEHAV;
数码管扫描SELTTIME的程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityseltimeisport(clk:
instd_logic;
din:
instd_logic_vector(31downto0);
daout:
outstd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0));endseltime;
architecturebehavofseltimeissignalsec:
std_logic_vector(2downto0);
beginprocess(clk)
beginif(clk'eventandclk='1')then
if(sec="111")thensec<="000";
elsesec<=sec+1;
endif;
endif;
endprocess;
process(sec,din(31downto0))begincasesecis
when"000"=>daout<=din(3downto0);
when"001"=>daout<=din(7downto4);
when"010"=>daout<=din(11downto8);
when"011"=>daout<=din(15downto12);
when"100"=>daout<=din(19downto16);
when"101"=>daout<=din(23downto20);
when"110"=>daout<=din(27downto24);
when"111"=>daout<=din(31downto28);
whenothers=>null;
endcase;
endprocess;
sel<=sec;
endbehav;
作用:
锁存信号输出给DIN[31..0],然后由SELTIME进行扫描输出,当SEL为”000”时选通第一个CNT10,输出到DELED进行译码输出。
依次类推。
四、实验波形