FPGA学习总结7:选择译码器实现

news2024/9/29 1:22:15

本博客以modelsim平台为例,实现了一个三八译码器;

Step1.在modelsim创建新的工程;

file-》new-》project,给工程命名,添加相应的文件;

 

 

Step2.添加事先准备的源文件和Testbench文件;

3-8译码器的源文件如下,文件命名:decoder3_8.v:

/*
 * @Descripttion: 
 * @version: 
 * @Author: 
 * @Date: 2021-01-19 16:34:50
 * @LastEditors: sueRimn
 * @LastEditTime: 2021-03-30 17:07:58
 */
module decoder3_8( 
	a, 
	b, 
	c, 
	out 
);
input a; //输入端口a 
input b; //输入端口b 
input c; //输入端口c 
output [7:0]out;//输出端口out 

reg [7:0]out; 
always@(a,b,c)
begin 
	case({a,b,c}) 
	3'b000:out = 8'b0000_0001; 
	3'b001:out = 8'b0000_0010; 
	3'b010:out = 8'b0000_0100; 
	3'b011:out = 8'b0000_1000; 
	3'b100:out = 8'b0001_0000; 
	3'b101:out = 8'b0010_0000; 
	3'b110:out = 8'b0100_0000; 
	3'b111:out = 8'b1000_0000; 
	endcase 
end


endmodule

Testbench仿真文件如下,文件命名:tb_decoder3_8.v:

`timescale 1ns / 1ps //timescale 单位 /精度。
//例如 1ns/100ps,这样在设置延时 #100,就代表着延时,100*1ns。并且可以延时 100.1ns

module decoder3_8_tb;

reg a;
reg b;
reg c;
wire [7:0] out;



//添加激励:进行仿真,就需要对其输入端口施加激励来观测输出端口的输出波
initial begin
    a = 0;b = 0;c = 0; //在0时刻三个输入均为0
    #200; //经过200ns的延时
    a = 0;b = 0;c = 1; //在200ns时输入信号的值
    #200; //又经过200ns的延时
    a = 0;b = 1;c = 0; //在400ns时输入信号的值
    #200; //又经过200ns的延时
    a = 0;b = 1;c = 1; //在600ns时输入信号的值
    #200;
    a = 1;b = 0;c = 0; 
    #200; 
    a = 1;b = 0;c = 1;
    #200; 
    a = 1;b = 1;c = 0; 
    #200; 
    a = 1;b = 1;c = 1; 
    #200; 
    $stop; //停止仿真
    end

//例化:这种例化方式代码显得简洁,但是要求在例化模块中的信号排列顺序要与被调用模块中的信号排列顺序严格一致。
decoder3_8 decoder3_8( 
	.a(a), 
	.b(b), 
	.c(c), 
	.out(out)
);



endmodule

Step3.进行仿真

1.单击_tb文件,右键Start simulation

2.设置暂态仿真时间长度

3.单击运行按钮,如图所示

 

Step4.观察仿真波形

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

p72 内网安全-域横向 CSMSF 联动及应急响应初识

数据来源 演示案例 MSF&CobaltStrike 联动 ShellWEB 攻击应急响应朔源-后门,日志WIN 系统攻击应急响应朔源-后门,日志,流量临时给大家看看学的好的怎么干对应 CTF 比赛 案例1 - MSF&CobaltStrike联动Shell CS下载与安装:cobaltstrike的安装与基础使用_co…

数字信号处理4

昨天是星期天,休息了一天,今天继续学习: 1、连续幅度信号的量化: 一个数字信号是一个数字序列,也就是说这个数字信号就可以用有限个数字来表示。 量化:通过把每个样本值表示为一个有限的数字&#xff0c…

CRM系统建设中需关注哪些关键节点?

随着数字化时代的到来,企业越来越依赖于互联网技术和数据管理,而客户关系管理(CRM)系统已经成为企业实现数字化转型和提升客户体验的关键工具之一。然而,在构建CRM系统的过程中,一些企业常常被一些关键节点…

键树(Keyword Tree)操作(插入删除查询)-双链树C语言实现_20230508

键树(Keyword Tree)操作(插入/删除/查询)-双链树C语言实现_20230508 前言 键树称为数字查找树或者搜索提示树,树的度数d≥2,树中每个结点储存的不是完整的关键字,而是只含有组成关键字的符号,常见情况为字符或数字。…

wsl2 ubuntu ip 自动同步到windows端的vscode remote ssh(wsl2 ubuntu 静态ip 固定ip)

环境信息 ​ wsl2 中linux版本:ubuntu ​ windows版本: win10/win11 问题描述 最近装了wsl2,使用vscode远程连接wsl2时遇到了如下问题: 1、wsl2的ip无法固定 2、wsl2的ssh服务不能自动开启。 尝试了网上许多方法,…

Vue核心 Vue生命周期

1.18. Vue生命周期 1.18.1. 引出生命周期 生命周期 又名生命周期回调函数、生命周期函数、生命周期钩子是什么: Vue在关键时刻帮我们调用的一些特殊名称的函数。生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。生命周期函数中的this指向是…

JUC并发编程与源码分析笔记13-AbstractQueuedSynchronizer之AQS

前置知识 公平锁和非公平锁可重入锁自旋思想LockSupport数据结构之双向链表设计模式之模板设计模式 AQS入门级别理论知识 是什么 AbstractQueuedSynchronizer:抽象的队列同步器。 用来实现锁或其他同步器组件的公共基础部分的抽象实现,是重量级基础框…

Hive知识回顾2

一、分桶表 1.1分桶表的概念 分桶表也叫做桶表,源自建表语法中bucket单词。是一种用于优化查询而设计的表类型。该功能可以让数据分解为若干个部分易于管理。 在分桶时,我们要指定根据哪个字段将数据分为几桶(几个部分)。默认规则…

人脸识别中的深度学习

深度学习在人脸识别中的应用 人脸识别的过程包括: 人脸检测人脸对齐特征提取(在数学上,实质上是:空间变换)特征度量 其中,特征提取与度量,是人脸识别问题中的关键问题,也是相关研究…

使用 ChatGPT 辅助学习——为自己找一个老师

我们每个人都有许多标签,例如高中生、成绩中等、文科,根据这些标签我和其他拥有相同标签的人分配了相同的教程、班级和老师,这可以带来效率上的提升,因为同一份教程、老师就可以服务几十上百人,而无须为每个人定制&…

软件测试工程师的核心竞争力究竟是什么?

对于测试员而言,了解自己岗位的核心竞争力是非常重要的。在职业初期,许多人认为掌握代码才是软件测试的核心竞争力,但是随着经验的增加,我们会发现真正的核心竞争力是由多个方面组成的。 首先,测试人员需要具备良好的测…

BERT 的面试题

BERT 的简介 1、BERT 是什么?它是用来做什么的? BERT(Bidirectional Encoder Representations from Transformers)是由Google开发的自然语言处理模型,是一种预训练模型,可以用于多种自然语言处理任务&…

【python自动化脚本—实现excel参数化循环调用判定结果】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、需求背景二、我要做什么三、已有接口四、脚本实现五、实现效果图 前言 为提升自己的python能力,记录在工作中实现的自动化脚本,温故…

51单片机(七)定时器

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

写文章的软件-一款写作文章的软件

写文章的软件 写文章的软件是一种工具,可以帮助用户轻松快速地创作高质量的文章。该软件一般包括以下几个主要功能: 写作界面:提供简洁、美观的写作界面,让用户专注于文章创作,同时可以进行排版、字体、颜色等调整。 …

力扣707. 设计链表

707. 设计链表 - 力扣(Leetcode) class MyLinkedList { public:// 定义链表节点结构体struct LinkedNode {int val;LinkedNode* next;LinkedNode(int val):val(val), next(nullptr){}};// 初始化链表MyLinkedList() {_dummyHead new LinkedNode(0); // …

BasicVSR++代码解读(分模块介绍-前向传播函数)

一、前向传播函数def forward(self, lqs): 输入:低质量序列L,shape为**(n, t, c, h, w)。 输出:HR序列,shape为(n, t, c, 4h, 4w)**。 (1)读取输入数据的维度大小     这里的n,t,c,h,w分别表示:一个bitch的图片数…

数据结构之双向链表,实现双向链表的增删改查

目录 一、双向链表的定义 1.双向链表节点的定义 2.双向链表的初始化 二、双向链表的函数接口实现 1.双链表的尾插 2.双向链表的尾删 3.双向链表的头插 4.双向链表的头删 6.双向链表在pos前面插入 7.双向链表删除pos位置的节点 8.双向链表的销毁 总结 一、双向链表的定义 双向链…

PyQt5桌面应用开发(11):摸鱼也要讲基本法,两个字,16

本文目录 PyQt5桌面应用系列鼠标不要钱,手腕还不要钱吗?PyQt5源程序python文件资源定义界面定义文件 技术要素资源文件StyleSheetsQMainWindow设置窗体几何 结论 PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQ…