Verilog设计参数化的译码器与编码器,以及设计4位格雷码计数器

news/2024/4/29 21:11:14/文章来源:https://blog.csdn.net/Zhong_ty/article/details/127614249

Verilog设计参数化的译码器与编码器,以及设计4位格雷码计数器

使用Quartus+modelsim完成设计

文章目录

  • Verilog设计参数化的译码器与编码器,以及设计4位格雷码计数器
    • 1. 参数化的译码器
      • 分析
      • 代码实现
      • Testbench
      • 结果
    • 2. 参数化的编码器
      • 分析
      • 代码
      • Testbench
      • 结果
    • 3. 4位格雷码计数器
      • 分析
      • 代码
      • Testbench
      • 结果

1. 参数化的译码器

在这里插入图片描述

分析

参数化译码器,由于输出Y使用的是独热码,所以可以直接用移位运算符实现。

代码实现

module decodern #(parameter n=3,m=1<<n)(input wire[n-1:0]in,output reg[m-1:0]y);//y is one-hot, so just use shift to finishalways@(*)y=1<<in;
endmodule 

Testbench

`timescale 1 ns/ 1 ns
module decodern_vlg_tst();
reg [2:0] in;
// wires                                               
wire [7:0]  y;decodern i1 ( .in(in),.y(y)
);
initial                                                
beginin=3'b010;#10 in=3'b001;#10 in=3'b111;#10 $stop;
end
initial $monitor($time,": in=%b \t -> \t y=%b ",in,y);
endmodule

结果

输出结果与预期一致

  • Modelsim波形显示以及monitor输出
    在这里插入图片描述
    在这里插入图片描述

  • 逻辑综合电路
    在这里插入图片描述

2. 参数化的编码器

在这里插入图片描述

分析

参数化的编码器,主要问题点是实现优先编码,只识别最高位最先为“1”的位数,然后赋值给输出y

  • 为了实现优先编码,应该到达就跳出循环,quartus的语法中不支持break;
  • 可以使用disable来跳出循环

代码

module encodern #(parameter n=3,m=1<<n
)(input wire[m-1:0]in,output reg[n-1:0]y
);integer i;always@(*)begin:encoderfor (i=m-1;i>0;i=i-1)if(in[i]==1)beginy = i;disable encoder;//jump loop called encoderendelse y = 0;endendmodule 

Testbench

`timescale 1 ns/ 1 ns
module encodern_vlg_tst();
reg [7:0] in;
// wires                                               
wire [2:0]  y;// assign statements (if any)                          
encodern i1 (
// port map - connection between master ports and signals/registers   .in(in),.y(y)
);
initial                                                
begin        in = 8'b1000_0000;#10 in = 8'b0111_1111;#10 in = 8'b0010_1000;#10 in = 8'b0000_0000;#10 in = 8'b0000_0000;#10 $stop;
end
initial $monitor($time, ": in:%b \t -> \t y:%b",in,y);
endmodule

结果

输出结果与预期一致

  • Modelsim波形显示以及monitor输出
    在这里插入图片描述
    在这里插入图片描述

  • 逻辑综合电路
    在这里插入图片描述

3. 4位格雷码计数器

在这里插入图片描述

分析

对于四位格雷码,可以直接用一个Case解决,实现一个循环,同时注意是异步复位

Q[3]Q[2]Q[1]Q[0]
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000

代码

module Gray(input clk,input rst_n,output reg[3:0]gray
);always@(posedge clk or negedge rst_n)if(!rst_n)	gray <= 4'b0000;elsecase(gray)4'b0000 : gray <= 4'b0001;4'b0001 : gray <= 4'b0011;4'b0011 : gray <= 4'b0010;4'b0010 : gray <= 4'b0110;4'b0110 : gray <= 4'b0111;4'b0111 : gray <= 4'b0101;4'b0101 : gray <= 4'b0100;4'b0100 : gray <= 4'b1100;4'b1100 : gray <= 4'b1101;4'b1101 : gray <= 4'b1111;4'b1111 : gray <= 4'b1110;4'b1110 : gray <= 4'b1010;4'b1010 : gray <= 4'b1011;4'b1011 : gray <= 4'b1001;4'b1001 : gray <= 4'b1000;4'b1000 : gray <= 4'b0000;default : gray <= 4'bx;endcaseendmodule 

Testbench

`timescale 1 ns/ 1 ns
module Gray_vlg_tst();
reg clk;
reg rst_n;
// wires                                               
wire [3:0]  gray;// assign statements (if any)                          
Gray i1 (
// port map - connection between master ports and signals/registers   .clk(clk),.gray(gray),.rst_n(rst_n)
);
initial 
begin rst_n = 0;//initial stateclk = 0;#5 rst_n = 1;#100 $stop;
endalways #5 clk = ~clk;initial $monitor($time,"-> \t now state of gray is : %b",gray);
endmodule

结果

输出结果与预期一致

  • Modelsim波形显示以及monitor输出
    在这里插入图片描述
    在这里插入图片描述

  • 逻辑综合电路

在这里插入图片描述

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

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

相关文章

Redis 主从架构数据同步

Redis 主从架构图 主从架构能够很大提升并发能力&#xff0c;master 节点负责写数据&#xff0c;slave 节点负责读数据&#xff0c;这样就涉及到 master 和 slave 数据同步的一个过程 一起来看一下数据是如何同步的吧 redis 的主从同步机制可以确保 master 和 slave 之间的数据…

Kubernetes 架构介绍

目录 一、Kubernetes 架构 1、Kubernetes 是什么&#xff1f; 2、Kubernetes 架构 3、Master 节点 4、Node 节点 5、推荐Add-ons 6、Kubeadm 7、查看组件运行状态 8、Kubeadm 容器化组件 二、namespace 1、命名空间 — namespace 2、常用命名空间命令 1. 查看存在哪…

【操作系统】混合索引分配和链接分配相关练习题

混合索引分配练习题&#xff1a; 比较简单&#xff0c;容易理解 练习1&#xff1a; 在UNIX操作系统中&#xff0c;给文件分配外存空间采用的是混合索引分配方式&#xff0c;如下图所示。UNIX系统中的某个文件的索引结点指示出了为该文件分配的外存的物理块的寻找方法。在该索…

C++ 并行编程

C 并行编程1. 进程和线程1.1 常规解释1.2 总结1.3 具体理解1.4 为什么使用多线程1.5 进程和线程的区别2. 并发与并行2.1 多进程并发2.2 多线程并发3. C中的多线程4. 时间管理4.1 C语言&#xff1a;time.h4.2 C11时间标准库&#xff1a;std::chrono4.2.1 获取时间段 int64_t/dou…

SQL学习十九、使用游标

游标&#xff08;cursor&#xff09;是一个存储在 DBMS 服务器上的数据库查询&#xff0c; 它不是一条 SELECT 语句&#xff0c;而是被该语句检索出来的结果集。在存储了 游标之后&#xff0c;应用程序可以根据需要滚动或浏览其中的数据。 我们通常的检索操作会返回一组称为结…

vue3+antd中使用Dayjs实现输出的日期格式化,和限制自定义日期选择器的可选范围

场景复现 在vue3antd项目中用到了日期选择器&#xff0c;但是默认的日期选择的结果是标准的日期格式&#xff0c;我们往往需要对最后的结果进行一定的格式化输出 一般输出的是这种标准的数据格式 如果我们想对时间进行指定的格式化输出&#xff0c;通常大家会想到moment&…

如何在页面中制作悬浮发布按钮弹窗

效果展示&#xff1a; 前置准备&#xff1a; 1.已搭建好&#xff0c;待添加悬浮层的页面 2.icon素材 具体步骤&#xff1a;&#xff08;3&#xff09; 1.添加悬浮层页面 2.配置悬浮层关闭触发器 3.配置首页发布icon触发器和动画 步骤分解&#xff1a; 1.添加悬浮层页面 1.1…

2022 年跨境电商要尝试的 25 个黑五营销技巧

关键词&#xff1a;黑五营销、黑色星期五活动、跨境电商黑五 我们汇总了以下最佳跨境电商黑五创意清单&#xff1a; 黑五营销技巧分享 如何宣传您的黑色星期五优惠 小型企业的黑五营销创意 黑五营销提示 随意跳到您最感兴趣的部分&#xff0c;或通读它们&#xff0c;看看…

JAVA序列化和反序列化学习笔记

0x01 开始学习JAVA反序列化&#xff0c;参考 《安全漫谈》和feng师傅的文章一步一步来&#xff0c;希望 能赶在这个学期学完java最基础的东西&#xff0c; 笔记做到这里方便自己查阅&#xff0c;也是事先实操了一下 &#xff0c;才写的笔记 概念&#xff1a; JAVA 序列化 就是…

program arguments,vm arguments,environment variable

作者:david_zhang@sh 【转载时请以超链接形式标明文章】 https://www.cnblogs.com/david-zhang-index/p/16846493.html 参数太多,傻傻分不清楚,简单说 1,program arguments是main函数args[]参数 2,vm arguments是java环境变量 3,environment variable是jvm环境变量 看代码…

华为设备配置NAT原理与示例

网络地址转换NAT 文章目录网络地址转换NAT1 NAT概述1.1 NAT产生的技术背景1.2 私有IP地址1.3 NAT技术原理2 静态NAT2.1 静态NAT原理2.2 静态NAT转换示例2.3 静态NAT配置介绍2.4 静态NAT配置示例3 动态NAT3.1 动态NAT原理3.2 动态NAT转换示例3.3 动态NAT配置介绍3.4 动态NAT配置…

resultMap结果映射

文章目录一、resulrMap结果映射二、驼峰命名自动映射查询结果的列名和Java对象的属性名对应不上怎么办&#xff1f; *第一种方式&#xff1a;as给列名起别名 *第二种方式&#xff1a;使用resultMap进行结果映射 *第三种方式&#xff1a;是否开启驼峰命名自动映射&#xff08;配…

算法学习:动态规划

14天阅读挑战赛 努力是为了不平庸~ 系列文章目录 第一章 算法简介 第二章 贪心算法 第三章 分治法 第四章 动态规划 目录系列文章目录2.0兔子序列2.1动态规划基础2.2最长的公共子序列2.2.1问题描述&#xff1a;2.2.2分析问题&设计思路&#xff1a;2.2.3图解思路&#xff1…

Python抓取我的CSDN粉丝数,白嫖GithubAction自动抓取

《Python抓取我的CSDN粉丝数&#xff0c;白嫖GithubAction自动抓取》 一.介绍 这段时间我想申请CSDN的博客专家认证&#xff0c;但是我发现我的总访问量不够&#xff08;博客专家的总访问量要大于20万&#xff09;&#xff0c;所以我就想把我的CSDN每天的 【总访问量】&#…

芯片与自动驾驶技术漫谈

芯片与自动驾驶技术漫谈 从芯片到系统国产,信创产业如何4步走上自主路? 信创产业发展是国家经济数字化转型、提升产业链发展的关键。我国明确了“数字中国”建设战略,抢占数字经济产业链制高点。推进信创产业的发展,促进信创产业在区域性落地生根,带动传统IT信息产业转型,…

【光通信】常见光模块与光纤收发器说明及作用区别

&#xff1a;单纤收发器是指采用的是单模光缆 单纤收发器是只用一根芯&#xff0c;两端都接这根芯&#xff0c;两端的收发器采用不同的光波长&#xff0c;所以能在一根芯里传输光信号。 双纤收发器就是采用了两根芯&#xff0c;一根发送一根接收&#xff0c;一端是发的另一端就…

MongoDB 分片集群均衡器导致的性能下降

近期&#xff0c;有人反馈其mongodb分片集群&#xff0c;在加载处理大批量数据时&#xff0c;程序处理十分缓慢并且应用还会报错&#xff1a;version mismatch detected for 。现将分析汇总如下备用。 一、问题现象 负责同事反馈9月1日18:52分左右&#xff0c;应用报错version…

计算机毕业设计(附源码)python医院预约挂号管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

学习笔记-php伪协议

伪协议 相关文章 & Source & Reference PHP伪协议的妙用 filter协议 php://filter 是一种元封装器&#xff0c; 设计用于数据流打开时的筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用&#xff0c;类似 readfile()、 file() 和 file_get_contents()&#x…

网课查题系统搭建-查题校园题库

网课查题系统搭建-查题校园题库 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&…