vhdl实验报告Word文件下载.docx
- 文档编号:18122186
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:12
- 大小:90.65KB
vhdl实验报告Word文件下载.docx
《vhdl实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《vhdl实验报告Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
BEGIN
IF(rst='
1'
)THEN//判断复位端是否为1
q<
='
0'
;
ELSIF(clk'
EVENTANDclk='
)THEN//上升沿触发
=d;
//d赋值到q
ENDIF;
ENDPROCESS;
END
实验仿真结果如下图:
D触发器+与非门
ENTITYexampleIS
PORT(a,b,clk:
INBIT;
OUTBIT);
ENDexample;
ARCHITECTUREexampleOFexampleIS
SIGNALtemp:
BIT;
//信号temp声明为BIT类型
temp<
=aNANDb;
//a和b逻辑与非赋值到temp
PROCESS(clk)
IF(clk'
)THEN
q<
=temp;
多路选择器
如果输入sel=“01”或者sel=“10”,那么输出将等于某一个输入(c=a或c=b)。
然而如果输入sel=“00”或者sel=“11”,那么输出将分别为‘0’和‘Z’(高阻)。
----------------------------------------
ENTITYmuxIS
PORT(a,b:
INSTD_LOGIC_VECTOR(7DOWNTO0);
sel:
INSTD_LOGIC_VECTOR(1DOWNTO0);
c:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDmux;
ARCHITECTUREexampleOFmuxIS
PROCESS(a,b,sel)
IF(sel="
00"
)THEN
c<
="
00000000"
ELSIF(sel="
01"
=a;
10"
=b;
ELSE
=(OTHERS=>
'
Z'
);
//c赋值为高阻状态
ENDIF;
仿真结果:
a为09H,b为08H。
通用译码器
一个通用的m-n译码器(输入为m位,输出为n位),电路有两个输入端口和一个输出端口:
sel,ena和x。
假设n是2的m次幂,即m=
。
如果ena=‘0’,那么x的所有输出位都变成高电平,否则x的值由给出得真值表确定。
ena
sel
x
00
1111
1
1110
01
1101
10
1011
11
0111
ENTITYdecoderIS
PORT(ena:
sel:
INSTD_LOGIC_VECTOR(2DOWNTO0);
x:
ENDdecoder;
ARCHITECTUREgeneric_decoderOFdecoderIS
PROCESS(ena,sel)
VARIABLEtemp1:
STD_LOGIC_VECTOR(x'
HIGHDOWNTO0);
VARIABLEtemp2:
INTEGERRANGE0TOx'
HIGH;
temp1:
=(OTHERS=>
//temp1赋值为1111
temp2:
=0;
IF(ena='
FORiINsel'
RANGELOOP
IF(sel(i)='
)THEN
temp2:
=2*temp2+1;
ELSE
=2*temp2;
ENDIF;
ENDLOOP;
temp1(temp2):
//temp1的第“temp2”位为0
x<
=temp1;
ENDgeneric_decoder;
实验仿真结果如下:
ALU(算数逻辑单元)
ALU是一种可以执行算术运算和逻辑运算操作的电路。
根据给出的电路真表。
信号sel的最高位用来选择输出哪种运算结果,信号的另外3位用来选择执行哪一种运算。
操作
功能
电路单元
0000
y<
=a
选择a
算术单元
0001
=a+1
将a加1
0010
=a-1
将a减1
0011
=b
选择b
0100
=b+1
将b加1
0101
=b-1
将b减1
0110
=a+b
将a和b相加
=a+b+cin
将a,b进位相加
=NOTa
将a取反
逻辑单元
=NOTb
将b取反
=aANDb
a和b逻辑与
=aORb
a和b逻辑或
=aNANDb
a和b逻辑与非
=aNORb
a和b逻辑或非
=aXORb
a和b逻辑异或
=aXNORb
a和b逻辑同或
USEieee.std_logic_unsigned.all;
ENTITYALUIS
PORT(a,b:
sel:
INSTD_LOGIC_VECTOR(3DOWNTO0);
cin:
y:
ENDALU;
ARCHITECTUREdataflowOFALUIS
SIGNALarith,logic:
STD_LOGIC_VECTOR(7DOWNTO0);
WITHsel(2DOWNTO0)SELECT
arith<
=aWHEN"
000"
a+1WHEN"
001"
a-1WHEN"
010"
bWHEN"
011"
b+1WHEN"
100"
b-1WHEN"
101"
a+bWHEN"
110"
a+b+cinWHENOTHERS;
logic<
=NOTaWHEN"
NOTbWHEN"
aANDbWHEN"
aORbWHEN"
aNANDbWHEN"
aNORbWHEN"
aXORbWHEN"
NOT(aXORb)WHENOTHERS;
WITHsel(3)SELECT
y<
=arithWHEN'
logicWHENOTHERS;
ENDdataflow;
模10计数器#1
一个进行循环累加的模10计数器,它的输入信号只有clk,输出是位宽为4的信号digit。
代码中使用了IF语句。
PROCESS内部使用了变量temp来实现存储4位输出信号所需的4个D触发器。
ENTITYcounterIS
PORT(clk:
INSTD_logic;
digit:
OUTINTEGERRANGE0TO9);
ENDcounter;
ARCHITECTUREcounterOFcounterIS
count:
PROCESS(clk)
VARIABLEtemp:
INTEGERRANGE0TO10;
BEGIN
IF(clk'
EVENTANDclk='
temp:
=temp+1;
IF(temp=10)THENtemp:
ENDIF;
digit<
ENDPROCESScount;
移位寄存器
一个四位的移位寄存器电路中,输出信号(q)滞后输入信号(d)4个时钟周期。
它带有一个异步复位端口(rst),当rst=1时,所有的触发器全部复位。
ENTITYshiftregIS
GENERIC(n:
INTEGER:
=4);
--#ofstages
PORT(d,clk,rst:
q:
OUTSTD_logic);
ENDshiftreg;
ARCHITECTUREbehaviorOFshiftregIS
SIGNALinternal:
STD_logic_VECTOR(n-1DOWNTO0);
PROCESS(clk,rst)
IF(rst='
internal<
ELSIF(clk'
EVENTANDclk='
=d&
internal(internal'
LEFTDOWNTO1);
q<
=internal(0);
ENDbehavior;
连‘0’检测器
对输入矢量中连续出现的零个个数进行统计(从矢量左端开始统计)。
在检测和统计开始后,只要在输入矢量中发现了‘1’,LOOP就会结束,因此整个电路检测的是输入矢量中左端开始第一个‘1’之前连续‘0’的个数。
ENTITYLeadingZerosIS
PORT(data:
zeros:
OUTINTEGERRANGE0TO8);
ENDLeadingZeros;
ARCHITECTUREbehaviorOFLeadingZerosIS
PROCESS(data)
VARIABLEcount:
INTEGERRANGE0TO8;
BEGIN
count:
FORiINdata'
CASEdata(i)IS
WHEN'
=>
count:
=count+1;
WHENOTHERS=>
EXIT;
ENDCASE;
zeros<
=count;
ENDPROCESS;
ENDbehavior;
自制通用译码器
更加例题4.1通用译码器程序,原先当sel输入为n,x输出的第n位为零(x初值为1111)。
更改后当sel输入为m时,x输出第m位为1(x初值为0000)。
其他不变,如果ena=‘0’,那么x的所有输出变为低电平。
实验源代码如下:
ENTITYdecoderrIS
ENDdecoderr;
ARCHITECTUREgeneric_decoderrOFdecoderrIS
ENDgeneric_decoderr;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vhdl 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)