EDA实验报告.docx
《EDA实验报告.docx》由会员分享,可在线阅读,更多相关《EDA实验报告.docx(9页珍藏版)》请在冰点文库上搜索。
![EDA实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/1019bd89-911b-48fb-9059-eaa8df8afcc0/1019bd89-911b-48fb-9059-eaa8df8afcc01.gif)
EDA实验报告
EDA与VHDL程序设计
实验报告
课程名称:
EDA与VHDL程序设计
实验名称:
1.序列检测器设计
2.用QuartusII设计正弦信号发生器
实验七序列检测器设计
一、实验目的:
用状态机实现序列检测器的设计,了解一般状态机的设计与应用。
二、实验原理:
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
书上P168例5-11描述的电路完成对序列数”11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出”A”,否则仍然输出”B”。
三、实验内容1:
用VHDL状态机设计一个8位序列信号检测器。
1、程序设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSCHKIS
PORT(DIN,CLK,CLR:
INSTD_LOGIC;
AB:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDSCHK;
ARCHITECTUREbehavOFSCHKIS
SIGNALQ:
INTEGERRANGE0TO8;
SIGNALD:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
D<="11100101";
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENQ<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
CASEQIS
WHEN0=>IFDIN=D(7)THENQ<=1;ELSEQ<=0;ENDIF;
WHEN1=>IFDIN=D(6)THENQ<=2;ELSEQ<=0;ENDIF;
WHEN2=>IFDIN=D(5)THENQ<=3;ELSEQ<=0;ENDIF;
WHEN3=>IFDIN=D(4)THENQ<=4;ELSEQ<=0;ENDIF;
WHEN4=>IFDIN=D(3)THENQ<=5;ELSEQ<=0;ENDIF;
WHEN5=>IFDIN=D
(2)THENQ<=6;ELSEQ<=0;ENDIF;
WHEN6=>IFDIN=D
(1)THENQ<=7;ELSEQ<=0;ENDIF;
WHEN7=>IFDIN=D(0)THENQ<=8;ELSEQ<=0;ENDIF;
WHENOTHERS=>Q<=0;
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(Q)
BEGIN
IFQ=8THENAB<="1010";
ELSEAB<="1011";
ENDIF;
ENDPROCESS;
ENDbehav;
2、仿真波形
3、引脚锁定与硬件下载
选择目标器件EP1C3,电路模式No.8,见图7.1。
用键7(PIO11)控制复位信号CLR;键6(PIO9)控制状态机工作时钟CLK;待检测串行序列数输入DIN接PIO10(最高位在前);指示输出AB接PIO39~PIO36(显示于数码管6)。
4、实验结果描述
下载后按以下四个步骤:
①按实验板“系统复位”键;②用键2和键1输入2位十六进制待测序列数“11100101”;③按键7复位(平时数码6指示显“B”);④按键6(CLK)8次,这时若串行输入的8位二进制序列码(分别显示于数码管2和数码管1以及发光管D8~D0)与预置码“11100101”相同,则数码管6应从原来的B变成A,表示序列检测正确,否则仍为B。
四、实验内容2:
将8位待测预置数作为外部输入信号,即可以随时改变序列检测器中的比较数据。
写出此程序的符号化单进程有限状态机。
1、程序设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSRJCIS
PORT(DIN,CLK,CLR:
INSTD_LOGIC;
D0:
INSTD_LOGIC_VECTOR(7DOWNTO0);
AB:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDSRJC;
ARCHITECTUREbehavOFSRJCIS
SIGNALQ:
INTEGERRANGE0TO8;
SIGNALD:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(D0)
BEGIN
FORnIN0TO7LOOP
D(n)<=D0(n);
ENDLOOP;
ENDPROCESS;
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENQ<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
CASEQIS
WHEN0=>IFDIN=D(7)THENQ<=1;ELSEQ<=0;ENDIF;
WHEN1=>IFDIN=D(6)THENQ<=2;ELSEQ<=0;ENDIF;
WHEN2=>IFDIN=D(5)THENQ<=3;ELSEQ<=0;ENDIF;
WHEN3=>IFDIN=D(4)THENQ<=4;ELSEQ<=0;ENDIF;
WHEN4=>IFDIN=D(3)THENQ<=5;ELSEQ<=0;ENDIF;
WHEN5=>IFDIN=D
(2)THENQ<=6;ELSEQ<=0;ENDIF;
WHEN6=>IFDIN=D
(1)THENQ<=7;ELSEQ<=0;ENDIF;
WHEN7=>IFDIN=D(0)THENQ<=8;ELSEQ<=0;ENDIF;
WHENOTHERS=>Q<=0;
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(Q)
BEGIN
IFQ=8THENAB<="1010";
ELSEAB<="1011";
ENDIF;
ENDPROCESS;
ENDbehav;
2、仿真波形
3、引脚锁定及硬件下载
选择目标器件EP1C3,选择电路模式No.8,见图7.1。
用键7(PIO11)控制复位信号CLR;键6(PIO9)控制状态机工作时钟CLK;待检测串行序列数输入DIN接PIO10(左移,最高位在前);将8位待检测预置数D0由键4/键3从外部输入,从而可随时改变检测密码,指示输出AB接PIO39~PIO36(显示于数码管6)。
4、实验结果描述
下载后按以下五个步骤:
①按实验板“系统复位”键;②用键4和键3输入2位预置数序列;③用键2和键1输入2位十六进制与预置数相同的序列数;④按键7复位(平时数码6指示显“B”);⑤按键6(CLK)8次,这时若串行输入的8位二进制序列码(分别显示于数码管2和1以及发光管D8~D0)与预置码相同,则数码6应从原来的B变成A,表示序列检测正确,否则仍为B。
7.1实验电路结构图NO.8
实验八用QuartusII设计正弦信号发生器
一、实验目的:
进一步熟悉QuartusII及其LPM_ROM与FPGA硬件资源的使用方法。
二、实验原理:
在许多实际情况下,必须使用宏功能模块才可以使用一些Altera特定器件的硬件功能,可用图形或硬件描述语言模块形式方便调用的宏功能块,来提高使得基于EDA技术的电子设计的效率和可靠性。
根据实际电路的设计需要,可以选择LPM库中的适当模块,并为其设计适当的参数;LPM功能模块内容丰富,每一模块的功能、参数含义、使用方法、硬件描述语言模块参数设置及调用方法都可以在QuartusII中的Help中查阅到,方法是选择Help→Megafunctions/LPM命令。
三、实验内容1:
定制初始化波形数据文件。
1、实验步骤
(1)建立.mif格式文件
选择File→New→Otherfiles→MemoryInitializationFile,然后单击OK按钮后产生ROM数据文件大小选择窗口;根据64点8位正弦数据的情况,选择ROM的数据数Number为64,数据宽Wordsize取8位;再将波形数据填入空的.mif数据表格中,完成后保存此数据文件。
(2)建立.hex格式文件
选择File→New→Otherfiles→HexadecimalFile,然后单击OK按钮后产生ROM数据文件大小选择窗口;根据64点8位正弦数据的情况,选择ROM的数据数Number为64,数据宽Wordsize取8位;再将波形数据填入空的.hex数据表格中,完成后保存此数据文件。
四、实验内容2:
定制LPM_ROM元件。
1、设计步骤
(1)打开MegeWizardPlug-InManager初始对话框。
在Memorycompiler下选择ROM:
1-PORT,再在左栏选择storage项下选择Cyclone器件和VHDL语言方式;最后输入ROM文件存放的路径和文件名,单击Next按钮。
(2)选择ROM控制线、地址线和数据线。
选择地址线位宽和ROM中数据分别为8和64;选择地址锁存控制信号inclock。
(3)选中指定路径上的文件,选中AllowIn-SystemMemory…复选框,并在TheInstance…文本框中输入ROM1,单击Next按钮,最后单击Finish按钮完成ROM的定制。
2、程序设计
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSINGTISPORT(CLK:
INSTD_LOGIC;DOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));END;ARCHITECTUREDACCOFSINGTISCOMPONENTdata_romPORT(address:
INSTD_LOGIC_VECTOR(5DOWNTO0);inclock:
INSTD_LOGIC;q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDCOMPONENT;SIGNALQ1:
STD_LOGIC_VECTOR(5DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=Q1+1;ENDIF;ENDPROCESS;u1:
data_romPORTMAP(address=>Q1,q=>DOUT,inclock=>CLK);END;
3、仿真波形
全程编译一次后进入时序仿真测试得出仿真波形如下:
4、实验结果描述
由仿真波形可以看到,随着时钟的上升沿的到来,输出端口将正弦波数据依次输出。
这些数据与填入到.mif格式文件中数据表格中的一致,由此可以看出,正弦信号的设计是正确的。
实验心得体会及注意事项
本学期EDA总共做了四次实验,每一次都有不同的收获和体会。
本次实验是四次中比较简单的一次,虽然上课时老师并没有详细讲解状态机和正弦信号发生器的相关知识,但是通过实验前的预习和实验过程的练习,对于这些知识也有了一定的了解。
在用状态机实现序列检测器的设计实验中,其程序设计的思路比较简单,就是要检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同,那么在实验硬件下载及检测时,只要输入正确的序列,在连续按控制CLOCK的键8次后,原来显示是“B”数码管变为“A”。
就完成了实验。
但是在实验过程中,我发现如果硬件下载成功后,却没有看到相应的数码管显示“B”时,就需要检查是否是排线没插好,如果检查发现连线没有问题,那么可能是数码管的问题,那么只要在引脚锁定时,换个数码管的引脚就可以了;还有一个问题就是当在序列检测时,如果给了8次时钟脉冲,却没有看到有“A”出现,可能是按键的问题,如果换为其他按键,仍然得不到解决,那么可能是引脚没有锁定成功,还有可能是排线没有插好,这些都有可能造成得不出正确的实验结果。
在四次EDA实验中我最有体会的就是通过使用QuartusⅡ对一般计数器进行设计、仿真和硬件测试的实验,那次实验使我对VHDL设计技术以及一些语句有了更进一步的了解,同时对课本所学知识也有了深刻的理解;在实验过程中,我的动手能力也得到了进一步的提高,而且我也发现了一些值得注意的地方:
在编程下载完成后,观察结果时如果发现数码管跳变过快或过慢时,那么可以通过改变时钟信号频率来改善,也可以将CLK改为手控;在时序仿真时,如果点击List不显示工程的端口引脚名,则需要重新编译一次;在波形仿真时,如果观察不到明显的变化,则可以改变时钟CLK的周期设置;硬件测试时,如果配置文件不成功,要检查编程器是否选择正确。
这些发现为后来的两次实验奠定了一定的基础。
这个学期的EDA实验我收获最大的就是学会利用VHDL对相关电路进行设计编程,同时也掌握了VHDL语言中基本语法与一些常用的语句,如if语句和case语句;对于VHDL中的顺序语句和并行语句的归类也有了清晰的概念,而且也掌握了利用QuartusⅡ对一些电路的设计,仿真和硬件测试的使用方法。
通过这几次的学习我对VHDL设计技术有了更加深刻的理解,在提高我分析问题和解决问题的能力的同时,也进一步培养了我的动手能力,这些都为我以后的工作学习打下了良好的基础。