实验六 序列信号检测器的VHDL设计
一、实验目的
(1)进一步熟悉Quartus II软件和GW48-PK2S实验系统的使用方法;
(2)用状态机实现序列检测器的设计,了解一般状态机的设计与应用
二、实验内容
1. 基本命题
利用Quartus II实现一个8位的序列检测器设计;给出仿真波形。最后进行引脚锁定并进行测试,硬件验证设计电路对给定序列的检测功能。
2. 扩展命题
在上述设计基础上,通过修改设计,实现以最简便的预置方法,获得n位序列检测器的功能。
三、实验仪器与器材
计算机1台,GW48-PK2S实验箱1台,QuartusⅡ6.0 1套。
四、实验
1. 基本命题
① 总体设计
设计两个进程。
进程Com1:实现序列的检测
进程Com2:实现检测结果的输出
② 程序设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITY SCHK IS
PORT(DIN, CLK, CLR :INSTD_LOGIC;--串行输入数据位/工作时钟/复位信号
AB :OUTSTD_LOGIC_VECTOR(3DOWNTO0));--检测结果输出
END SCHK;
ARCHITECTURE behav OF SCHK IS
SIGNAL Q :INTEGERRANGE0TO8;
SIGNAL D :STD_LOGIC_VECTOR(7DOWNTO0); --8位待检测预置数
BEGIN
D <="11100101" ;--8位待检测预置数:密码:E5H
Com1:PROCESS( CLK, CLR )
BEGIN
IF CLR = '1' THEN Q <=0;
ELSIF CLK'EVENTAND CLK='1' THEN--时钟到来时,判断并处理当前输入的位
CASE Q IS
WHEN0=> IF DIN = D(7)THEN Q <=1;ELSE Q <=0;ENDIF;
WHEN1=> IF DIN = D(6)THEN Q <=2;ELSE Q <=0;ENDIF;
WHEN2=> IF DIN = D(5)THEN Q <=3;ELSE Q <=0;ENDIF;
WHEN3=> IF DIN = D(4)THEN Q <=4;ELSE Q <=0;ENDIF;
WHEN4=> IF DIN = D(3)THEN Q <=5;ELSE Q <=0;ENDIF;
WHEN5=> IF DIN = D(2)THEN Q <=6;ELSE Q <=0;ENDIF;
WHEN6=> IF DIN = D(1)THEN Q <=7;ELSE Q <=0;ENDIF;
WHEN7=> IF DIN = D(0)THEN Q <=8;ELSE Q <=0;ENDIF;
WHENOTHERS=> Q <=0;
ENDCASE;
ENDIF;
ENDPROCESS;
Com2:PROCESS( Q ) --检测结果判断输出
BEGIN
IF Q =8 THEN AB <="0001"; --序列数检测正确,输出 "1"
ELSE AB <="0011"; --序列数检测错误,输出 "3"
ENDIF;
ENDPROCESS;
END behav ;
③ 仿真分析
图6-1 仿真波形图
仿真预测:当输入的结果是预置序列的时候,输出0001;反之,输出0011。
④ 硬件测试
表1-1 SCHK在GWAC6板上目标芯片EP1C6Q240C8的引脚锁定信息
端口名称 |
端口符号 |
GWAC6板输入输出元件 |
GWAC6板接口 |
目标器件引脚 |
备注 |
输入引脚D |
DIN |
按键1 |
PIO1 |
233 |
模式No.5
|
清零端 |
CLR |
按键2 |
PIO2 |
234 |
|
主频率 |
CLK |
按键3 |
PIO3 |
235 |
|
4位数字量输出引脚 |
AB |
数码管7 |
PIO40~47 |
161-164 |
图6-2引脚的配置
2. 扩展命题
① 总体设计
本命题通过改写case判断语句,将要检测的序列和序列的位数关联,通过IF语句对状态进行判断。
② 程序设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITY SCHK IS
PORT(DIN, CLK, CLR ,BIT_COUNT :INSTD_LOGIC;--串行输入数据位/工作时钟/复位信号/要检测的位数标识码
AB :OUTSTD_LOGIC_VECTOR(3DOWNTO0));--检测结果输出
END SCHK;
ARCHITECTURE behav OF SCHK IS
SIGNAL Q :INTEGERRANGE0TO8;
SIGNAL D :STD_LOGIC_VECTOR(7DOWNTO0); --8位待检测预置数
SIGNAL Count:INTEGERRANGE0TO8; --要检测的位数(最多支持8位)
BEGIN
D <="11100000" ;--8位待检测预置数:--11100000
Com1:PROCESS( CLK, CLR )
BEGIN
IF BIT_COUNT='0' THEN Count<=3;--判断要检测多少位
ELSE Count<=4;ENDIF;
IF CLR = '1' THEN Q <=0;
ELSIF CLK'EVENTAND CLK='1' THEN--时钟到来时,判断并处理当前输入的位
if Q=(Count+1)THEN Q<=0;ENDIF;--开始新的一轮的检测
if(DIN = D(7-Q))THEN Q<=Q+1;ELSE Q<=0;ENDIF;--进行状态的检测
ENDIF;
ENDPROCESS;
Com2:PROCESS( Q ) --检测结果判断输出
BEGIN
IF Q =(Count+1) THEN AB <="0001"; --序列数检测正确,输出 "1"
ELSE AB <="0011"; --序列数检测错误,输出 "3"
ENDIF;
ENDPROCESS;
END behav ;
③ 仿真分析
当BIT_COUNT为低电平的时候,实现4位序列检测器的功能;当BIT_COUNT为高电平的时候,实现5位序列检测器的功能。设待检测的序列为“11100000”。
图6-3 5位序列检测器波形图
④ 硬件测试
表1-2 SCHK在GWAC6板上目标芯片EP1C6Q240C8的引脚锁定信息
端口名称 |
端口符号 |
GWAC6板输入输出元件 |
GWAC6板接口 |
目标器件引脚 |
备注 |
输入引脚D |
DIN |
按键1 |
PIO1 |
233 |
模式No.5
|
清零端 |
CLR |
按键2 |
PIO2 |
234 |
|
主频率 |
CLK |
按键3 |
PIO3 |
235 |
|
检测位数标识 |
BIT_COUNT |
按键4 |
PIO4 |
236 |
|
4位数字量输出引脚 |
AB |
数码管7 |
PIO40~47 |
161-164 |
图6-4 引脚的配置
五、实验思考题
如果带检测预置数必须以右移方式进入序列检测器,那么该程序该做如何修改?
① 总体设计
同序列检测中数据右移输入的思路,但是我们这次不进行检测,收到什么就将其存入程序中的预置数变量中。我们需要额外设置一个输入变量,变量ISE用来标示是否进行预置数序列的输入,当ISE=1,输入口DIN用来输入预置数序列的;当ISE=0,输入口DIN用来输入要检测的序列。其中预置数序列的长度与BIT_COUNT相关。
② 程序设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITY SCHK IS
PORT(DIN, CLK, CLR ,BIT_COUNT,ISE :INSTD_LOGIC;--串行输入数据位/工作时钟/复位信号/要检测的位数标识码/预置数序列的输入使能
AB :OUTSTD_LOGIC_VECTOR(3DOWNTO0));--检测结果输出
END SCHK;
ARCHITECTURE behav OF SCHK IS
SIGNAL Q :INTEGERRANGE0TO8;
SIGNAL D :STD_LOGIC_VECTOR(7DOWNTO0); --8位待检测预置数
SIGNAL Count:INTEGERRANGE0TO8; --要检测的位数(最多支持8位)
BEGIN
Com1:PROCESS( CLK, CLR )
BEGIN
IF BIT_COUNT='0' THEN Count<=3;--判断要检测多少位
ELSE Count<=4;ENDIF;
IF CLR = '1' THEN Q <=0;
ELSIF CLK'EVENTAND CLK='1' THEN--时钟到来时,判断并处理当前输入的位
if Q=(Count+1)THEN Q<=0;ENDIF;--开始新的一轮的检测
--ISE=1的时候,开始预置数序列的输入
if ISE='1' then D(7-Q)<=DIN;Q<=Q+1;
else
if(DIN = D(7-Q))THEN Q<=Q+1;ELSE Q<=0;ENDIF;--进行状态的检测
endif;
ENDIF;
ENDPROCESS;
Com2:PROCESS( Q ) --检测结果判断输出
BEGIN
IF Q =(Count+1)AND ISE='0' THEN AB <="0001"; --当序列数检测正确并且预置数使能为低电平的时候,输出 "1"
ELSE AB <="0011"; --序列数检测错误,输出 "3"
ENDIF;
ENDPROCESS;
END behav ;
③ 仿真分析
图6-5 带有预置数功能的4位序列检测器波形图
④ 硬件测试
表1-3 SCHK在GWAC6板上目标芯片EP1C6Q240C8的引脚锁定信息
端口名称 |
端口符号 |
GWAC6板输入输出元件 |
GWAC6板接口 |
目标器件引脚 |
备注 |
输入引脚D |
DIN |
按键1 |
PIO1 |
233 |
模式No.5
|
清零端 |
CLR |
按键2 |
PIO2 |
234 |
|
主频率 |
CLK |
按键3 |
PIO3 |
235 |
|
检测位数标识 |
BIT_COUNT |
按键4 |
PIO4 |
236 |
|
预置数使能 |
ISE |
按键5 |
PIO5 |
237 |
|
4位数字量输出引脚 |
AB |
数码管7 |
PIO40~47 |
161-164 |
图6-6 引脚的配置
作者:kissazi2
出处:http://www.cnblogs.com/kissazi2/
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
2012-07-06 Windows程序员的Linux快捷键
2012-07-06 Linux目录结构