项目一:3-8译码器的设计与实现(FPGA)

本文以Altera公司生产的Cyclone IV系列的EP4CE15F17C8为主芯片的CRD500开发板作为项目的硬件实现平台,并以Quarter 18.1和ModelSim为开发工具和仿真工具。

目录

一、3-8译码器工作原理

二、设计步骤

1、创建工程文件夹和编辑设计文件

(1)新建文件夹decoder_38

(2)输入源程序

(3)文件存盘

2、创建工程 

(1)工程名、实体名

(2)将设计文件加入工程,单击下图的”···“按钮。 

(3)选择目标芯片,选择CRD500开发板FPGA芯片EP4CE15F17C8。

(4)选择综合器和仿真器类型

(5)结束设置

3、编译工程

(1)编译前的设置

(2)编译

4、仿真测试

(1)方法一:基于Quartus 自身工具模块的仿真

(2)基于modelsim_altera的仿真

5、引脚锁定与.sof文件下载

(1)引脚锁定

(2)选择编程模式和配置

三、板载测试


一、3-8译码器工作原理

        3个输入信号进行译码,得到8个输出状态,输入与输出的关系如下表所示,表中1表示高电平,0表示低电平。

二、设计步骤

1、创建工程文件夹和编辑设计文件

(1)新建文件夹decoder_38

        路径:D:\Verilog\txhFPGA\decoder_38

        注:文件夹名不能包含中文

(2)输入源程序

        选择菜单“File” --> "New"

        选择“Verilog HDL File”

        输入程序:

//3_8译码器程序,key1,key2,key3为译码器的输入,out为译码器的输出
module decoder_38(out, key_in);
	output[7:0] out;            // 说明信号out的流向
	input[2:0] key_in;          // 说明信号key_in的流向
	reg[7:0] out;               // 申明信号类型
always @(key_in)                // 定义always块
	begin
		case(key_in)
			3'd0: out=8'b11111110;    //key_in = 000, out[0]为低电平
			3'd1: out=8'b11111101;
			3'd2: out=8'b11111011;
			3'd3: out=8'b11110111;
			3'd4: out=8'b11101111;
			3'd5: out=8'b11011111;
			3'd6: out=8'b10111111;
			3'd7: out=8'b01111111;
		endcase
	end
endmodule

(3)文件存盘

        快捷键“CTRL+S”保存文件,找到要保存的文件夹D:\Verilog\txhFPGA\decoder_38

文件名应与实体名保持一致,故文件名命名为decoder_38.v。保存后弹出对话框,点击“Yes”。

2、创建工程 

(1)工程名、实体名

(2)将设计文件加入工程,单击下图的”···“按钮。 

(3)选择目标芯片,选择CRD500开发板FPGA芯片EP4CE15F17C8。

(4)选择综合器和仿真器类型

若选”None“,表示选择Quartus II 自带的综合器与仿真器。

对于简单设计项目,激励信号有规律,可选自带的仿真工具产生波形激励文件,作为信号源进行仿真。而对于复杂项目,激励信号无规律或很复杂,此时须选择第三方仿真软件(ModelSim_Altera)

(5)结束设置

显示本工程项目的层次结构和各层次的实体名

建立工程后,可使用”Project“菜单中的”Add/Remove Files in Project···“选项页在工程中设计、添加或删除其他文件。

或者:

3、编译工程

(1)编译前的设置

选择目标器件

选择配置器件的编程配置方式

"Active Serial"这种方式指对专用配置器件(如项目中使用EPCS16)进行配置用的编程方式,而PC对此FPGA的直接配置方式都是JTAC方式。在”Configuration device“项目中选择配置芯片为”EPCS16“。

选择编译后的输出文件格式(可选)。

选择目标器件闲置引脚的状态(可选)

(2)编译

或者

若编译成功,则:

4、仿真测试

(1)方法一:基于Quartus 自身工具模块的仿真

第一步:建立激励文件

第二步:设置仿真时间区域

第三步:保存波形文件。使用”File“菜单中的”Save As“项,将decoder_38.vwf的波形文件存入工程文件夹D:\Verilog\txhFPGA\decoder_38中。

第四步:输入信号节点,将3-8译码器的端口信号选入波形编辑器中。

选择完毕后按”OK“。

第五步:编辑输入波形(输入激励信号)。

单击选中图中的key_in[0],使之变成蓝色,再单击时钟,在”Clock“对话框中设置周期为20us、占空比为50%的周期信号。

得到key_in[0]的波形

同理将key_in[1]设置为周期为40us、占空比为50%的周期信号;

在key_in[2]的波形编辑区,前30us设置为低电平,再设置30us为高电平,40us为低电平。

仿真测试:

(2)基于modelsim_altera的仿真

第一步:编写激励文件

创建testbench激励文件模板。

打开模板文件,修改保存,得到激励文件。选择”File“菜单中的”Open“项,打开D:\Verilog\txhFPGA\decoder_38\simulation\modelsim\decoder_38.vt文件(创建的模板默认存放位置,且文件名自动命名)

激励脚本内容: 

`timescale 1 ps/ 1 ps
module decoder_38_vlg_tst();

//reg eachvec;
// test vector input registers
reg [2:0] key_in;
// wires                                               
wire [7:0]  out;

// assign statements (if any)                          
decoder_38 i1 (
// port map - connection between master ports and signals/registers   
	.key_in(key_in),
	.out(out)
);
initial	//key_in[2]                                         
begin                                                                      
	key_in[2] = 1'b0;
	key_in[2] = #29440000 1'b1;
	key_in[2] = #30720000 1'b0;	
end                                                       

initial	//key_in[1]
begin
	repeat(2)
	begin
		key_in[1] = 1'b0;
		key_in[1] = #20000000 1'b1;
		# 20000000;
	end
	key_in[1] = 1'b0;
end

initial	//key_in[0]
begin
	repeat(5)
	begin
		key_in[0] = 1'b0;
		key_in[0] = #10000000 1'b1;
		# 10000000;
	end
end                                                    
endmodule

第二步:设置仿真环境参量

依据激励文件修改参量,将”Time scale“栏设置为”1ps“(与激励文件一致)

找到并添加激励文件,填写激励文件名、激励文件中的module名、激励文件中的实例名”i1“,选中”End simulation at"并填写数字100,单位为”us"(与激励文件一致)。 

ModelSim仿真

启动仿真,观察仿真结果(单击后跳转ModelSim,将自动获得仿真结果)

若是第一次使用Modelsim-Altera,需建立Quartus Prime和Modelsim的链接。

设置仿真文件的格式与目录

 

5、引脚锁定与.sof文件下载

(1)引脚锁定

引脚锁定后,必须再编译一次,将引脚信息编译进下载文件中。在编译后产生的文件中,.sof格式的文件可直接下载到FPGA中运行。

引脚的绑定依据:

(1)FPGA与CRD500开发板上5个按键的连接关系:

信号名称rstkey1key2key3key4
FPGA引脚P14T10P11N11N12
功能键按下——高电平;不按——低电平
(2)8个LED灯与FPGA连接关系:
信号名称Led(0)Led(1)Led(2)Led(3)Led(4)Led(5)Led(6)Led(7)
FPGA引脚R11T11R12T12R13T13R14T14
功能1——亮;0——灭

(2)选择编程模式和配置

为将编译产生的.sof文件配置进FPGA中进行测试,首先将系统连接好,开发板上电,后在“Tool”菜单中选择“Programmer”。在“Mode”栏选择编程模式为“JTAG”,单击选中出现的下载文件右侧的第一个小方框,打勾。若此文件未出现,则点击左侧的“Add File”,选择配置文件decoder_38.sof。

单击“Hardware Setup”后,在弹出的对话框中选择硬件,然后单击“Close”按钮。

若未出现硬件,则参考:

 quartus烧程序的时候programmer不显示硬件怎么回事_quartus检测不到板子-CSDN博客

再单击左侧的“Start”项。

当右侧的“Process”栏显示为100%,则表示编程成功。

三、板载测试

板载测试就是由三个按键产生000~111共8组输入信号,通过指示灯的亮与灭判断3-8译码器输出的准确性。

当未按键时,key_in=000,此时译码器输出“11111110”,即LED0=0(LED1灭,其余亮)

当按下key1时,key_in=001,此时LED2=0(LED1灭,其余亮)

……

当同时按下key1、 key2、 key3,key_in=111,此时译码器输出“01111111”,即LED7灭,其余亮。

板载测试结果如上表结论一致,由此验证了3-8译码器输出的准确性,至此该项目完成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/895081.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序上传组件封装uploadHelper2.0使用整理

一、uploadHelper2.0使用步骤说明 uploadHelper.js ---上传代码封装库 cos-wx-sdk-v5.min.js---腾讯云,对象存储封装库 第一步,下载组件代码,放置到自己的小程序项目中 第二步、 创建上传对象,执行选择图片/视频 var _this th…

【成长day】SuperPointSuperGlue(02): Superglue论文算法学习与对应源码解析

论文工作地址:https://psarlin.com/superglue/ 论文地址:https://arxiv.org/abs/1911.11763 讲解PPT:https://psarlin.com/superglue/doc/superglue_slides.pdf 论文源码:https://github.com/magicleap/SuperGluePretrainedNetwor…

WebRTC音频 03 - 实时通信框架

WebRTC音频01 - 设备管理 WebRTC音频 02 - Windows平台设备管理 WebRTC音频 03 - 实时通信框架(本文) WebRTC音频 04 - 关键类 WebRTC音频 05 - 音频采集编码 一、前言: 前面介绍了音频设备管理,并且以windows平台为例子,介绍了ADM相关的类…

【分立元件】方形贴片固定电阻器制造流程

方形贴片固定电阻器是怎么制造的呢?我们在文章【分立元件】电阻的基础知识中介绍到电阻器中的固定电阻器,其品种有贴片电阻器。 贴片电阻器如下所示&#

vuex的store应用

1.在pakage.json加一行 2.和main同级别加一个js文件 import Vue from vue import Vuex from vuexVue.use(Vuex)export default new Vuex.Store({state: {langFlag: new Date().getTime()},mutations: {setLangFlag(state) {state.langFlag new Date().getTime()}} })3.在mai…

Shiro框架——shiro的认证

基本使用 1.环境搭建 引入pom依赖 说明:Shiro获取权限相关信息可以通过数据库获取,也可以通过ini配置文件获取 这里演示从ini文件中获取。 在resources目录下创建ini文件注:这里等号左边的(如:zhangsan),就代表用户…

STM32--基于STM32F103C8T6的OV7670摄像头显示

本文介绍基于STM32F103C8T6实现的OV7670摄像头显示设计(完整资源及代码见文末链接) 一、简介 本文实现的功能:基于STM32F103C8T6实现的OV7670摄像头模组实时在2.2寸TFT彩屏上显示出来 所需硬件: STM32F103C8T6最小系统板、OV76…

学习docker第三弹------Docker镜像以及推送拉取镜像到阿里云公有仓库和私有仓库

docker目录 1 Docker镜像dockers镜像的进一步理解 2 Docker镜像commit操作实例案例内容是ubuntu安装vim 3 将本地镜像推送至阿里云4 将阿里云镜像下载到本地仓库5 后记 1 Docker镜像 镜像,是docker的三件套之一(镜像、容器、仓库)&#xff0…

大模型~合集14

我自己的原文哦~ https://blog.51cto.com/whaosoft/12286799 # Attention as an RNN Bengio等人新作:注意力可被视为RNN,新模型媲美Transformer,但超级省内 , 既能像 Transformer 一样并行训练,推理时内存需求又不随 token 数线性…

基于因果推理的强对流降水临近预报问题研究

我国地域辽阔,自然条件复杂,灾害性天气种类繁多,地区差异性大。雷雨大风、冰雹、短时强降水等强对流天气是造成经济损失、危害生命安全最严重的一类灾害性天气。由于强对流降水具有高强度、小空间尺度等特点,一直是气象预报领域的…

vue组件传值之$attrs

1.概述:$attrs用于实现当前组件的父组件,向当前组件的子组件通信(祖-》孙) 2.具体说明:$attrs是一个对象,包含所有父组件传入的标签属性。 注意:$attrs会自动排除props中声明的属性&#xff0…

矩阵系统哪家好~矩阵短视频运营~怎么矩阵OEM

一、引言 在当今的数字化时代,矩阵系统在众多领域中发挥着至关重要的作用,如视频监控、信号切换、自动化控制等。然而,如何判断一个矩阵系统是否好用成为了许多用户面临的问题。本文将从多个方面探讨矩阵系统好用与否的判断标准,希…

Python | Leetcode Python题解之第492题构造矩形

题目: 题解: class Solution:def constructRectangle(self, area: int) -> List[int]:w int(sqrt(area))while area % w:w - 1return [area // w, w]

QtCreator14调试Qt5.15出现 Launching Debugger 错误

1、问题描述 使用QtCreator14调试程序,Launching Debugger 显示红色,无法进入调试模式。 故障现象如下: 使能Debugger Log窗口,显示: 325^error,msg"Error while executing Python code." 不过&#xff…

SpringCloud学习:Seata总结与回顾

SpringCloud学习:Seata总结与回顾 文章目录 SpringCloud学习:Seata总结与回顾1. Seata实战:测试2. Seate原理总结和面试题3. Seata总结与回顾4. 易混点 1. Seata实战:测试 测试问题 未启用分布式事务 若不使用分布式事务&#xf…

基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) PSO优化过程: PSO优化前后,模型训练对比: 数据预测对比: 误差回归对比&a…

以太网交换安全:MAC地址漂移与检测(实验:二层环路+网络攻击)

一、什么是MAC地址漂移? MAC地址漂移是指网络中设备的MAC地址在运行过程中发生变化的现象。 MAC地址是用于唯一标识网络中的设备。 MAC地址漂移是指交换机上一个VLAN内有两个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象。…

I2C的学习

I2C通信的基本概念 双线制:I2C通信采用两条线进行数据传输: SDA(Serial Data Line):数据线,用于传输数据。SCL(Serial Clock Line):时钟线,用于同步数据传输。…

软件测试工程师:如何写出好的测试用例?

软件测试用例(Test Case)是软件测试过程中的一种详细文档或描述,用于描述在特定条件下,对软件系统或组件进行测试的步骤、输入数据、预期输出和预期行为。编写高质量的测试用例是确保软件质量的关键步骤之一。以下是一些编写优秀测试用例的建议&#xff…

FLexsim 实体

发生器 属性列表 到达方式 ①到达时间间隔:根据数学分布,自定义到达时间间隔 ②到达时间表 到达时间:发生器产生实体的时间;实体名称:对应时间产生的临时实体的名字 ③到达序列:批量产生多少实体。 暂存区 …