五邑大学EDA实验代码源码和考试总结.docx
- 文档编号:6037873
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:72
- 大小:2.18MB
五邑大学EDA实验代码源码和考试总结.docx
《五邑大学EDA实验代码源码和考试总结.docx》由会员分享,可在线阅读,更多相关《五邑大学EDA实验代码源码和考试总结.docx(72页珍藏版)》请在冰点文库上搜索。
五邑大学EDA实验代码源码和考试总结
一、实验设计
第一次实验
1、用门电路设计3-8译码器,译码器的真值表如下。
输入 输出
encba y0y1y2y3y4y5y6y7
-------- -----------------------
0 xxx 1 1 1 1 1 1 1 1
1 000 0 1 1 1 1 1 1 1
1 001 1 0 1 1 1 1 1 1
1 010 1 1 0 1 1 1 1 1
1 011 1 1 1 0 1 1 1 1
1 100 1 1 1 1 0 1 1 1
1 101 1 1 1 1 1 0 1 1
1 110 1 1 1 1 1 1 0 1
1 111 1 1 1 1 1 1 1 0
第二次实验
1、用宏单元(宏单元可以是D触发器,74160,7447,门电路等)设计一模14计数器。
要求:
1)带清零端;
2)用两个数码管显示计数结果。
3)计数器输入时钟可以用轻触键。
附录:
模14计数器的真值表
输入 输出
clkclr q4_q3q2q1q0
------- -----------
x 0 0_0000
u 1 0_0001
u 1 0_0010
u 1 0_0011
u 1 0_0100
u 1 0_0101
u 1 0_0110
u 1 0_0111
u 1 0_1000
u 1 0_1001
u 1 1_0000
u 1 1_0001
u 1 1_0010
u 1 1_0011
u 1 0_0000
图2-1模14计数器
2、用LUT实现3输入异或门,要求画出完整的电路图(参照教材图2.29)。
输入异或门的真值表如下:
输入 输出
c,b,af
----------
000 0
001 1
010 1
011 0
100 1
101 0
110 0
111 1
图2-23输入异或门
第三次实验——基于VerilogHDL的流水灯设计
1、用VerilogHDL设计一模11二进制加法计数器,并仿真;
表1模11二进制计数器真值表
输入信号 输出信号
clk clr_n q[3:
0]
------------ ------------
x 0 0000;
u 1 0001;
u 1 0010;
u 1 0011;
u 1 0100;
u 1 0101;
u 1 0110;
u 1 0111;
u 1 1000;
u 1 1001;
u 1 1010;
u 1 0000;
------------------------------
注:
u表示时钟上沿
modulem11_counter(clk,clr_n,q);//定义模块名为m11_counter
inputclk,clr_n;//定义1位的输入clk和clr_n
outputreg[3:
0]q;//定义4位的输出q
always@(posedgeclk,negedgeclr_n)//当clk上升沿或clr_n下降沿到来时触发
begin
if(!
clr_n)q=0;//clr_n为0时q为0000
else
begin
if(q==10)q=0;//判断q是否为1010,是则归0,否则自加1
elseq=q+1;
end
end
endmodule
2、用VerilogHDL设计4-11译码器,并仿真;
表24-11译码器
输入信号 输出信号
en code[3:
0] y[10:
0]
------------- ------------------
0 x 111_1111_1111
1 0000 000_0000_0001
1 0001 000_0000_0010
1 0010 000_0000_0100
1 0011 000_0000_1000
1 0100 000_0001_0000
1 0101 000_0010_0000
1 0110 000_0100_0000
1 0111 000_1000_0000
1 1000 001_0000_0000
1 1001 010_0000_0000
1 1010 100_0000_0000
---------------------------------------
module4_11_decoder(en,code,y);//定义模块名为4_11_decoder
inputen;//定义1位的输入en
input[3:
0]code;//定义4位的输入code
outputreg[10:
0]y;//定义reg类型的11位输出y
always@(en,code)//当en或code有变化时触发
begin
if(!
en)y=11'b111_1111_1111;//若en为0时,输出y的十一位全为1
else//当en为1时,根据真值表调整与输入
begin//code对应的输出y
case(code)
4'b0000:
y=11'b000_0000_0001;
4'b0001:
y=11'b000_0000_0010;
4'b0010:
y=11'b000_0000_0100;
4'b0011:
y=11'b000_0000_1000;
4'b0100:
y=11'b000_0001_0000;
4'b0101:
y=11'b000_0010_0000;
4'b0110:
y=11'b000_0100_0000;
4'b0111:
y=11'b000_1000_0000;
4'b1000:
y=11'b001_0000_0000;
4'b1001:
y=11'b010_0000_0000;
4'b1010:
y=11'b100_0000_0000;
default:
y=11'b111_1111_1111;
endcase
end
end
endmodule
3[选做,可在实验时完成]用前面设计的计数器和译码器设计流水控制电路,控制11个LED灯的流动:
计数器的clk输入接轻触开关,用于控制LED灯的移动;
选做内容:
1计数器增加加减法计数输入控制端;
2用lpm_counter设计从50MHz到10Hz的分频电路,为计数器提供时钟;
3其它;
表3模11加减法二进制计数器真值表
输入信号 输出信号
clk clr_n up_dn q[3:
0]
------------------- ------------
x 0 x 0000;
u 1 1 q=q+1;
u 1 0 q=q-1;
------------------------------
注:
u表示时钟上沿
//模11加减法二进制计数器
moduleadd_and_subtract_counter(clk,clr_n,up_dn,q);
inputclk,clr_n,up_dn;//定义一位的输入clk,clr_n,up_dn
outputreg[3:
0]q;//定义reg类型的三位的输出q
always@(posedgeclk,negedgeclr_n)//当clk上升沿或clr_n下降沿到来时触发
begin
if(!
clr_n)q=0;//当clr_n为0时,q的值为0
else//否则up_dn控制加或减
begin
if(!
up_dn)q=q-1;//up_dn为0时,q自减1
elseq=q+1;//up_dn为1时,q自加1
end
end
endmodule
3、
(2)从50MHz到10Hz的分频电路
//从50MHz到10Hz的分频电路
//定义分频器模块counter_down
modulecounter_down(clk_out,clk_in,reset);
inputclk_in,reset;//定义两个一位的输入clk_in(输入时钟),reset
outputregclk_out;//定义一个reg型的一位的输出clk_out(输出时钟)
integercnt;//定义一个int型的cnt变量
always@(posedgeclk_in,posedgereset)//当clk_in或reset上升沿时触发
begin
if(reset)//当reset为1时清零
begin
cnt<=0;
clk_out<=0;
end
else
begin//reset为0时开始分频
if(cnt==2_499_999)//分频从50MHz到10Hz
begin
clk_out<=!
clk_out;
cnt<=0;
end
elsecnt<=cnt+1;
end
end
endmodule
第四次实验——基本电路设计+学号显示准备
基于VerilogHDL的基本电路设计
1、[基本]用VerilogHDL设计一个19人表决电路,输入为1时表示同意,输入为0时表示不同意。
同意者超过半数则表决通过(表决器输出1),不通过表决器输出0.
2、[选做]用VerilogHDL设计一功能与74161完全一样的电路,其真值表如下:
-------------------------------------------------------------------
输入输出
CRnLDnENTENPCPDCBAq3q2q1q0RCO
--------------------------------------------
0xxxxxxxx00000
10xxudcbadcba*
110xuxxxxq3q2q1q0*
11x0uxxxxq3q2q1q0*
1111uxxxx00000
1111uxxxx00010
1111uxxxx00100
1111uxxxx00110
1111uxxxx01000
1111uxxxx01010
1111uxxxx01100
1111uxxxx01110
1111uxxxx10000
1111uxxxx10011
---------------------------------------------------------------------
*RCO=q3&q2&q1&q0&ENT
//19人表决器
modulevoter19(pass,vote);
input[18:
0]vote;
outputregpass;
reg[5:
0]sum;
integeri;
always@(vote)
begin
sum=0;
for(i=0;i<=18;i=i+1)
if(vote[i])sum=sum+1;
if(sum[3]&sum[1])pass=1;
elseif(sum[3]&sum[2])pass=1;
elseif(sum[4])pass=1;
elsepass=0;
end
endmodule
//74161电路
module74161(CRn,LDn,ENT,ENP,CP,D,C,B,A,q3,q2,q1,q0,RCO);
inputCRn,LDn,ENT,ENP,CP,D,C,B,A;
outputregq3,q2,q1,q0;
outputregRCO;
always@(negedgeCRn,posedgeCP)
begin
if(!
CRn){q3,q2,q1,q0}=0;
elseif(!
LDn){q3,q2,q1,q0}={D,C,B,A};
elseif(ENT&&ENP)
begin
if(9=={q3,q2,q1,q0}){q3,q2,q1,q0}=0;
else{q3,q2,q1,q0}={q3,q2,q1,q0}+1;
end
else{q3,q2,q1,q0}={q3,q2,q1,q0};
RCO=q3&q0&ENT;
end
endmodule
基于VerilogHDL的设计学号显示电路
1用VerilogHDL设计学号显示电路,用一个数码管显示。
要求写出完整的程序,并仿真。
方法一:
宏定义
//共阳数码管真值表
`definenum08'b1100_0000
`definenum18'b1111_1001
`definenum28'b1010_0100
`definenum38'b1011_0000
`definenum48'b1001_1001
`definenum58'b1001_0010
`definenum68'b1000_0010
`definenum78'b1111_1000
`definenum88'b1000_0000
`definenum98'b1001_0000
`definenumx8'b1111_1111
moduleshow_student_number(clr,clk,show);
inputclr,clk;
outputreg[7:
0]show;
reg[3:
0]i;
always@(negedgeclr,posedgeclk)
begin
if(!
clr)beginshow=0;i=0;end
else
begin
if(i==10)i=0;
case(i)
4'd0:
show=`num3;//3
4'd1:
show=`num1;//1
4'd2:
show=`num1;//1
4'd3:
show=`num6;//6
4'd4:
show=`num0;//0
4'd5:
show=`num0;//0
4'd6:
show=`num4;//4
4'd7:
show=`num6;//6
4'd8:
show=`num6;//6
4'd9:
show=`num0;//0
default:
show=`numx;
endcase
i=i+1;
end
end
endmodule
方法二:
状态机
moduleshow_student_number(clr,clk,show);
inputclr,clk;
outputreg[7:
0]show;
reg[3:
0]i;
reg[7:
0]numx=8'b1111_1111,num0=8'b1100_0000,num1=8'b1111_1001,num2=8'b1010_0100,num3=8'b1011_0000,num4=8'b1001_1001,num5=8'b1001_0010,num6=8'b1000_0010,num7=8'b1111_1000,num8=8'b1000_0000,num9=8'b1001_0000;
always@(negedgeclr,posedgeclk)
begin
if(!
clr)beginshow=0;i=0;end
else
begin
if(i==10)i=0;
case(i)
4'd0:
show=num0;//0
4'd1:
show=num0;//0
4'd2:
show=num0;//0
4'd3:
show=num0;//0
4'd4:
show=num0;//0
4'd5:
show=num0;//0
4'd6:
show=num0;//0
4'd7:
show=num0;//0
4'd8:
show=num0;//6
4'd9:
show=num0;//0
default:
show=`numx;
endcase
i=i+1;
end
end
endmodule
2[选做]用VerilogHDL设计分频电路,输入50Mhz,输出2hz。
要求写出完整的程序。
//从50MHz到2Hz的分频电路
module50MHz_to_2Hz(clk_out,clk_in,reset);
inputclk_in;
inputreset;
outputclk_out;
integercnt;
regclk_out;
always@(posedgeclk_in,posedgereset)
begin
if(reset)
begin
cnt<=0;
clk_out<=0;
end
else
begin
if(cnt==12_499_999)
begin
clk_out<=!
clk_out;
cnt<=0;
end
elsecnt<=cnt+1;
end
end
endmodule
3[选做]用VerilogHDL设计学号显示电路,要求:
1)用八个数码管显示
2)学号按照时钟的节拍从右而左进入,基准时钟为2hz
3)8位学号进入后停顿5秒,然后从新开始
4)其它功能
4)要求写出完整的程序,并仿真
方法一:
宏定义
//共阳数码管真值表
`definenxxxxxxxx64'b1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1111
`definenxxxxxxx164'b1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1001
`definenxxxxxx1664'b1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1001__1000_0010
`definenxxxxx16064'b1111_1111__1111_1111__1111_1111__1111_1111__1111_1111__1111_1001__1000_0010__1100_0000
`definenxxxx160064'b1111_1111__1111_1111__1111_1111__1111_1111__1111_1001__1000_0010__1100_0000__1100_0000
`definenxxx1600464'b1111_1111__1111_1111__1111_1111__1111_1001__1000_0010__1100_0000__1100_0000__1001_1001
`definenxx16004664'b1111_1111__1111_1111__1111_1001__1000_0010__1100_0000__1100_0000__1001_1001__1000_0010
`definenx160046664'b1111_1111__1111_1001__1000_0010__1100_0000__1100_0000__1001_1001__1000_0010__1000_0010
`definen1600466064'b1111_1001__1000_0010__1100_0000__1100_0000__1001_1001__1000_0010__1000_0010__1100_0000
module8_Nixie_tube_show(clr,clk,hex);
inputclr,clk;
outputreg[63:
0]hex;
reg[4:
0]i;
always@(posedgeclk,negedgeclr)
begin
if(!
clr)begini=0;hex=`nxxxxxxxx;end
else
begin
if(i==19)i=0;
case(i)
0:
hex=`nxxxxxxxx;
1:
hex=`nxxxxxxx1;
2:
hex=`nxxxxxx16;
3:
hex=`nxxxxx160;
4:
hex=`nxxxx1600;
5:
hex=`nxxx16004;
6:
hex=`nxx160046;
7:
hex=`nx1600466;
8:
hex=`n16004660;
9:
hex=`n16004660;
10:
hex=`n16004660;
11:
hex=`n16004660;
12:
hex=`n160
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 EDA 实验 代码 源码 考试 总结