EDA测试序列检测器.docx
《EDA测试序列检测器.docx》由会员分享,可在线阅读,更多相关《EDA测试序列检测器.docx(16页珍藏版)》请在冰豆网上搜索。
EDA测试序列检测器
EDA实验报告
实验目的:
设计一个含数码管显示的七位二进制序列发生器。
实验内容:
1.原理说明:
多位数码显示电路由显示字符的段选线和选通数码管的位选线控制。
各位数码管共用8位段选线的电路结构使得同一时刻选通的各位数码管显示相同字符。
通过采用动态扫描显示方式,利用人眼视觉暂留效应及数码管余辉特性,可以“同时”显示出多位数码管的字符。
2.工程结构框架:
移位寄存器(序列发生器)
7SEG译码器
控制abcdefg七段
实验流程:
1设计移位寄存器
2设计7SEG译码器
3完成顶层电路图连接,构成完整序列发生器
4完成仿真,下载测试
实验具体步骤:
1、设计移位寄存器(序列发生器)
序列发生器是产生一组0、1二进制码按特定顺序排列的串行信号的仪器。
利用移位寄存器设计一个七位二进制序列发生器。
创建工程文件:
单击界面左上角的file,执行file--->NewProjectWizard命令,打开工程导向,在第一页中分别输入新建工程所在路径,工程名称和顶层实体名称(同名)
器件选择:
如上图,在Family中选择MAXII,如需修改可以选择菜单Assignments->Device命令,弹出Device设置对话框修改Devicefamily和Availabledevices选项。
创建设计文件:
利用lpm定制移位寄存器,在对话框左侧列表中选择InstalledPlug-Ins—>Storage
—>lpm_shiftreg项
在参数设置中,设置移位方向为左移,数据并入并出端和串入串出端,异步清零。
定制完成后生成的VHDL程序:
--megafunctionwizard:
%LPM_SHIFTREG%
--GENERATION:
STANDARD
--VERSION:
WM1.0
--MODULE:
lpm_shiftreg
--============================================================
--FileName:
xulie.vhd
--MegafunctionName(s):
--lpm_shiftreg
--
--SimulationLibraryFiles(s):
--lpm
--============================================================
--************************************************************
--THISISAWIZARD-GENERATEDFILE.DONOTEDITTHISFILE!
--
--9.0Build18404/29/2009SP1SJWebEdition
--************************************************************
--Copyright(C)1991-2009AlteraCorporation
--YouruseofAlteraCorporation'sdesigntools,logicfunctions
--andothersoftwareandtools,anditsAMPPpartnerlogic
--functions,andanyoutputfilesfromanyoftheforegoing
--(includingdeviceprogrammingorsimulationfiles),andany
--associateddocumentationorinformationareexpresslysubject
--tothetermsandconditionsoftheAlteraProgramLicense
--SubscriptionAgreement,AlteraMegaCoreFunctionLicense
--Agreement,orotherapplicablelicenseagreement,including,
--withoutlimitation,thatyouruseisforthesolepurposeof
--programminglogicdevicesmanufacturedbyAlteraandsoldby
--Alteraoritsauthorizeddistributors.Pleaserefertothe
--applicableagreementforfurtherdetails.
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYlpm;
USElpm.all;
ENTITYxulieIS
PORT
(
aclr:
INSTD_LOGIC;
clock:
INSTD_LOGIC;
data:
INSTD_LOGIC_VECTOR(6DOWNTO0);
load:
INSTD_LOGIC;
shiftin:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
shiftout:
OUTSTD_LOGIC
);
ENDxulie;
ARCHITECTURESYNOFxulieIS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALsub_wire1:
STD_LOGIC;
COMPONENTlpm_shiftreg
GENERIC(
lpm_direction:
STRING;
lpm_type:
STRING;
lpm_width:
NATURAL
);
PORT(
load:
INSTD_LOGIC;
aclr:
INSTD_LOGIC;
clock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
data:
INSTD_LOGIC_VECTOR(6DOWNTO0);
shiftout:
OUTSTD_LOGIC;
shiftin:
INSTD_LOGIC
);
ENDCOMPONENT;
BEGIN
q<=sub_wire0(6DOWNTO0);
shiftout<=sub_wire1;
lpm_shiftreg_component:
lpm_shiftreg
GENERICMAP(
lpm_direction=>"RIGHT",
lpm_type=>"LPM_SHIFTREG",
lpm_width=>7
)
PORTMAP(
load=>load,
aclr=>aclr,
clock=>clock,
data=>data,
shiftin=>shiftin,
q=>sub_wire0,
shiftout=>sub_wire1
);
ENDSYN;
--============================================================
--CNXfileretrievalinfo
--============================================================
--Retrievalinfo:
PRIVATE:
ACLRNUMERIC"1"
--Retrievalinfo:
PRIVATE:
ALOADNUMERIC"0"
--Retrievalinfo:
PRIVATE:
ASETNUMERIC"0"
--Retrievalinfo:
PRIVATE:
ASET_ALL1NUMERIC"1"
--Retrievalinfo:
PRIVATE:
CLK_ENNUMERIC"0"
--Retrievalinfo:
PRIVATE:
INTENDED_DEVICE_FAMILYSTRING"FLEX10K"
--Retrievalinfo:
PRIVATE:
LeftShiftNUMERIC"0"
--Retrievalinfo:
PRIVATE:
ParallelDataInputNUMERIC"1"
--Retrievalinfo:
PRIVATE:
Q_OUTNUMERIC"1"
--Retrievalinfo:
PRIVATE:
SCLRNUMERIC"0"
--Retrievalinfo:
PRIVATE:
SLOADNUMERIC"1"
--Retrievalinfo:
PRIVATE:
SSETNUMERIC"0"
--Retrievalinfo:
PRIVATE:
SSET_ALL1NUMERIC"1"
--Retrievalinfo:
PRIVATE:
SYNTH_WRAPPER_GEN_POSTFIXSTRING"0"
--Retrievalinfo:
PRIVATE:
SerialShiftInputNUMERIC"1"
--Retrievalinfo:
PRIVATE:
SerialShiftOutputNUMERIC"1"
--Retrievalinfo:
PRIVATE:
nBitNUMERIC"7"
--Retrievalinfo:
CONSTANT:
LPM_DIRECTIONSTRING"RIGHT"
--Retrievalinfo:
CONSTANT:
LPM_TYPESTRING"LPM_SHIFTREG"
--Retrievalinfo:
CONSTANT:
LPM_WIDTHNUMERIC"7"
--Retrievalinfo:
USED_PORT:
aclr0000INPUTNODEFVALaclr
--Retrievalinfo:
USED_PORT:
clock0000INPUTNODEFVALclock
--Retrievalinfo:
USED_PORT:
data0070INPUTNODEFVALdata[6..0]
--Retrievalinfo:
USED_PORT:
load0000INPUTNODEFVALload
--Retrievalinfo:
USED_PORT:
q0070OUTPUTNODEFVALq[6..0]
--Retrievalinfo:
USED_PORT:
shiftin0000INPUTNODEFVALshiftin
--Retrievalinfo:
USED_PORT:
shiftout0000OUTPUTNODEFVALshiftout
--Retrievalinfo:
CONNECT:
@clock0000clock0000
--Retrievalinfo:
CONNECT:
q0070@q0070
--Retrievalinfo:
CONNECT:
@shiftin0000shiftin0000
--Retrievalinfo:
CONNECT:
shiftout0000@shiftout0000
--Retrievalinfo:
CONNECT:
@load0000load0000
--Retrievalinfo:
CONNECT:
@aclr0000aclr0000
--Retrievalinfo:
CONNECT:
@data0070data0070
--Retrievalinfo:
LIBRARY:
lpmlpm.lpm_components.all
--Retrievalinfo:
GEN_FILE:
TYPE_NORMALxulie.vhdTRUE
--Retrievalinfo:
GEN_FILE:
TYPE_NORMALxulie.incFALSE
--Retrievalinfo:
GEN_FILE:
TYPE_NORMALxulie.cmpTRUE
--Retrievalinfo:
GEN_FILE:
TYPE_NORMALxulie.bsfTRUE
--Retrievalinfo:
GEN_FILE:
TYPE_NORMALxulie_inst.vhdFALSE
--Retrievalinfo:
LIB_FILE:
lpm
2、设计7SEG译码器
7seg译码器VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityseg_7is
port(
scan_clk,cnt_aclr:
instd_logic;
z0,z1,z2,z3,z4,z5,z6:
instd_logic;
seg7:
outstd_logic_vector(6downto0);
wei:
outstd_logic_vector(6downto0));
endseg_7;
architecturertlofseg_7is
signalseg_wire:
std_logic;
signalwei_wire:
std_logic_vector(6downto0);
typestis(k_0,k_1,k_2,k_3,k_4,k_5,k_6);
signalst_nxt:
st;
begin
scan_st:
process(scan_clk,cnt_aclr,st_nxt)
begin
ifcnt_aclr='1'then
st_nxt<=k_0;
elsif(scan_clk'eventandscan_clk='1')then
casest_nxtis
whenk_0=>st_nxt<=k_1;
whenk_1=>st_nxt<=k_2;
whenk_2=>st_nxt<=k_3;
whenk_3=>st_nxt<=k_4;
whenk_4=>st_nxt<=k_5;
whenk_5=>st_nxt<=k_6;
whenk_6=>st_nxt<=k_0;
endcase;
endif;
endprocess;
scan_o:
process(st_nxt,z0,z1,z2,z3,z4,z5,z6)
begin
casest_nxtis
whenk_0=>
seg_wire<=z0;
wei_wire<="0000001";
whenk_1=>
seg_wire<=z1;
wei_wire<="0000010";
whenk_2=>
seg_wire<=z2;
wei_wire<="0000100";
whenk_3=>
seg_wire<=z3;
wei_wire<="0001000";
whenk_4=>
seg_wire<=z4;
wei_wire<="0010000";
whenk_5=>
seg_wire<=z5;
wei_wire<="0100000";
whenk_6=>
seg_wire<=z6;
wei_wire<="1000000";
endcase;
endprocess;
seg7<="1111110"whenseg_wire='0'else
"0110000"whenseg_wire='1';
wei<=wei_wire;
endrtl;、
3、完成顶层电路图连接
创建子模块的符号文件:
在7SEG译码器VHDL程序文件中选择菜单File—>Create/update—>CreateSymbolFileforCurrentFile命令
并连接完成顶层电路图:
各模块功能说明:
设定发生序列,发生序列设为1010101;
利用LPM定制的移位寄存器,完成序列发生功能,利用shiftout端发生内定序列1010101。
当移位寄存器并行输出端全为零时,重新载入序列1010101
7段译码器,完成数码管显示功能。
4.功能仿真:
在simulatorsettings中选择功能仿真
功能仿真波形图:
放大版:
如上所示,scan_clk为七段译码器的时钟信号,在时钟上升沿时改变选通数码管的位选线,seg7为该数码管的位选线,因scan_clk时钟信号频率较高,利用人眼视觉暂留效应及数码管余辉特性,可以“同时”显示出多位数码管的字符。
缩小版:
如上图所示,clock为移位寄存器的数据串出端,在时钟上升沿改变向外输出,发射序列为1010101。
5.管脚分配及下载