实验四序列发生器
时间:2025-04-29
时间:2025-04-29
南昌大学EDA实验报告。实验四序列发生器。内容详尽,确实是本人运行出来的代码。最后评分为优秀!
南昌大学实验报告
学生姓名: 学 号: 专业班级:中兴101班
实验类型:□验证 □综合 ■设计 □创新 实验日期:2012、11、16 成绩:
实验四 序列信号发生器与检测器设计
一、实验目的
1、学习VHDL文本输入法 2、学习有限状态机的设计
3、利用状态机实现串行序列的输出与序列的检测 4、继续学习优化设计
二.实验内容与要求
1. 设计序列发生器,完成序列为0111010011011010的序列生成器 2.用有限状态机设计序列检测器,实现串行序列11010的检测器 3. 若检测到符合要求的序列,则输出显示位为“1”,否则为“0” 4. 对检测到的次数计数
5.整个工程采用顶层文件+底层模块的原理图或文本的设计思路
三、实验仪器
PC机、Quartus II软件、EDA实验箱
四、实验思路
1. 设计序列发生器
基本思想为一个信号CQ1计数,给另一个信号CO(代表序列的每一位)赋值的方法:
先设定端口CQ1用于产生序列时计数,因为序列共16位,因此端口CQ1为标准逻辑矢量,位宽为4,设另一个端口M代表序列的每一位,CQ1每计一个数,就给M赋一个值,这样产生一个16位的序列。由于端口不能参与相关运算,因此在结构体中我分别定义了信号CQ1(标准逻辑矢量,位宽4),信号Q与相应的端口CQ1 CO对应,在进程中参与相应的运算,在程序的最后再用端口接收信号: CO<=Q;
在进程中我采用case – when 语句,如当CQ1为“0000”的时候,给另一信号Q赋‘0’,当CQ1为“0001”
2. 序列检测器
序列检测器设计的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及序列,直到在连续的检测中收到的每一位码都与实验要求相同。在此,必须利用状态转移图。
电路需要分别不间断记忆:初始状态、1、11、110、1101、11010共六种状态,状态转移如图:
南昌大学EDA实验报告。实验四序列发生器。内容详尽,确实是本人运行出来的代码。最后评分为优秀!
若检测到“11010”序列,则输出信号N为1,定义VARIABLE X:STD_LOGIC_VECTOR (3 DOWNTO 0)进行计数,最后把变量X赋给输出SS,在数码管上显示检测到序列“11010”的次数。
3.时钟脉冲的选择
数码管显示的扫描时钟需要很快的速度,因此采用1KHz频率的时钟;而序列发生器,为了能够人眼识别亮灭,则我选择采用2000分频之后得到的0.5Hz频率
五.原理图输入法设计(程序来源:基本上独立完成) 1. 建立文件夹
建立自己的文件夹(目录),如c:\myeda,进入Windows操作系统 Quartus II不能识别中文,文件及文件夹名不能用中文。 2. 原理图设计输入
打开Quartus II,选菜单File→New,选择“Device Design File->Block Diagram->Schematic File”项。点击“OK”,在主界面中将打开 “Block Editor”窗口。
(1) 分频器模块:(实体名为DIV)
本设计使用的FPGA开发板中使用的芯片是Cyclone II EP2C35F672C8,使用的是10kHz的时钟脉冲输入,根据电路的具体设计需要,对其进行分频设计。
如图1所示为系统的分频模块,其中模块Clockout管脚输出为0.5hz的时钟脉冲,得出序列发生器和序列检测器模块正常工作的时钟信号,在Clockin管脚输出为一个1khz的时钟脉冲,作用与动态扫描模块的正常工作。
输入管脚:Clockin为1khz脉冲输入; 输出管脚:Clockout为0.5hz脉冲输出;
--时间:2012年11月10号 --版本:7.2
--功能:分频器(2000分频)
南昌大学EDA实验报告。实验四序列发生器。内容详尽,确实是本人运行出来的代码。最后评分为优秀!
分频模块DIV源代码div.vhd如下:
-------分频程序,从1KHZ中得到0.5HZ的计数频率,2000分频---------- LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; --这3个程序包足发应付大部分的VHDL程序设计 USE IEEE.STD_LOGIC_Arith.ALL; USE IEEE.STD_LOGIC_Unsigned.ALL;
ENTITY DIV IS
GENERIC(N:Integer:=20000);--此处定义了一个默认值N=10000,即电路为10000分频电路; Port(Clockin:IN STD_LOGIC;
ClockOut:OUT STD_LOGIC); END;
ARCHITECTURE Devider OF DIV IS
SIGNAL Counter:Integer RANGE 0 TO N-1; SIGNAL Temp1:STD_LOGIC; --信号的声明在结构体内,进程外部 BEGIN PROCESS(Clockin) BEGIN
IF RISING_EDGE(Clockin) THEN IF Counter=N-1 THEN counter<=0; Temp1<=Not Temp1; ELSE Counter<=Counter+1; IF Counter=(N/2-1) THEN Temp1<=NOT Temp1; END IF; END IF; END IF; END PROCESS; ClockOut<=Temp1; END;
(2) 序列发生器模块:(实体名为C_OUT) 序列发生器模块如图2所示,其中 : 输入管脚: CLK为0.5hz的时钟脉冲; RST为复位信号;
输出管脚:CO序列发生器设计时用于计数,实现模16计数,以产生16位的序列
南昌大学EDA实验报告。实验四序列发生器。内容详尽,确实是本人运行出来的代码。最后评分为优秀!
图2
--时间:2012年11月10号 --版本:7.2
--功能:产生一个十六位的指定序列
-----------------C_OUT------------------------------------------------------------------ LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED. …… 此处隐藏:8102字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:英语国家概况课后题总结