Verilog | 二进制与格雷码

这篇具有很好参考价值的文章主要介绍了Verilog | 二进制与格雷码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、格雷码简介

格雷码是一个叫弗兰克·格雷的人在 1953 年发明的,最初用于通信。格雷码是一种循环二进制码或者叫作反射二进制码。格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以避免二进制编码计数组合电路中出现的亚稳态。格雷码常用于通信,FIFO 或者 RAM 地址寻址计数器中。

格雷码属于可靠性编码,是一种错误最小化的编码方式,因为虽然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的 3 转换为 4 时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。

十进制 自然二进制 格雷码
0 000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100

二、转化原理

自然二进制码binary_code转换为格雷码gray_code如下:

Verilog | 二进制与格雷码

g r a y _ c o d e = b i n a r y _ c o d e ⊕ ( b i n a r y _ c o d e > > 1 ) gray\_code=binary\_code⊕(binary\_code>>1) gray_code=binary_code(binary_code>>1)

格雷码gray_code转换为自然二进制码binary_code要复杂一些,以4bit码为例:

Verilog | 二进制与格雷码

{ b i n a r y _ c o d e 3 = g r a y _ c o d e 3 , b i n a r y _ c o d e 2 = g r a y _ c o d e 2 ⊕ b i n a r y _ c o d e 3 = g r a y _ c o d e 2 ⊕ g r a y _ c o d e 3 , b i n a r y _ c o d e 1 = g r a y _ c o d e 1 ⊕ b i n a r y _ c o d e 2 = g r a y _ c o d e 1 ⊕ g r a y _ c o d e 2 ⊕ g r a y _ c o d e 3 , b i n a r y _ c o d e 0 = g r a y _ c o d e 0 ⊕ b i n a r y _ c o d e 1 = g r a y _ c o d e 0 ⊕ g r a y _ c o d e 1 ⊕ g r a y _ c o d e 2 ⊕ g r a y _ c o d e 3 \begin{cases}binary\_code_3=gray\_code_3,\\binary\_code_2=gray\_code_2⊕binary\_code_3=gray\_code_2⊕gray\_code_3,\\binary\_code_1=gray\_code_1⊕binary\_code_2=gray\_code_1⊕gray\_code_2⊕gray\_code_3,\\binary\_code_0=gray\_code_0⊕binary\_code_1=gray\_code_0⊕gray\_code_1⊕gray\_code_2⊕gray\_code_3\end{cases} binary_code3=gray_code3,binary_code2=gray_code2binary_code3=gray_code2gray_code3,binary_code1=gray_code1binary_code2=gray_code1gray_code2gray_code3,binary_code0=gray_code0binary_code1=gray_code0gray_code1gray_code2gray_code3文章来源地址https://www.toymoban.com/news/detail-412771.html

三、实现

`timescale 1ns/1ns
 
module gray_counter(
   input   clk,
   input   rst_n,
 
   output  reg [3:0] gray_out
);
//格雷码转二进制
reg  [3:0] bin_out;
wire [3:0] gray_wire;
 
always @(posedge clk or negedge rst_n)begin
   if(rst_n == 1'b0) begin
      bin_out <= 4'b0;
   end
   else begin
      bin_out[3] = gray_wire[3];
      bin_out[2] = gray_wire[2]^bin_out[3];
      bin_out[1] = gray_wire[1]^bin_out[2];
      bin_out[0] = gray_wire[0]^bin_out[1];
   end 
end
//二进制加一
reg [3:0] bin_add_wire;
always @(posedge clk or negedge rst_n)begin
   if(rst_n == 1'b0) begin
      bin_add_wire <= 4'b0;
   end
   else begin
      bin_add_wire <= bin_out + 1'b1;
   end
end
//二进制转格雷码
assign gray_wire = (bin_add_wire >> 1) ^ bin_add_wire;
 
always @(posedge clk or negedge rst_n)begin
   if(rst_n == 1'b0) begin
      gray_out <= 4'b0;
   end
   else begin
      gray_out <= gray_wire;
   end
end
endmodule

到了这里,关于Verilog | 二进制与格雷码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 格雷码的生成与解码

    在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,

    2024年02月09日
    浏览(48)
  • 声音信号的A律13折线(格雷码)编码仿真

    1.2设计要求 1.对一个声音信号a .wav file作为处理对象; 2. 执行抽样,抽样频率fs=8kHz; 3. 实现对A律(A=87.6)压缩特性近似的13折线函数,采用格雷码; 4. 调制方式为4psk; 5. 信道无噪声; 6. 接收段根据发送端采用的技术,做相应处理,并对恢复出的信号进行绘图。 2.1 设计原

    2024年02月10日
    浏览(33)
  • FPGA中有限状态机的状态编码采用格雷码还是独热码?

            有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态,究竟转向哪一状态还是留在原状态不但取决于各个输入值,还取决于当前

    2024年02月05日
    浏览(63)
  • 【Verilog基础】二进制比较器

    1、1、一位数值比较器(是多位比较器的基础) 1、真值表: 2、由真值表推逻辑表达式: 3、逻辑电路:

    2024年02月05日
    浏览(40)
  • 【verilog】6位二进制数加法器

    1:掌握无符号二进制数加法器的设计方法。 2:掌握使用Modelsim对verilog程序进行仿真和验证的方法。 二进制加法器由全加器构成,全加器功能和电路图如下图所示。 全加器对两个1位二进制数和1位来自低位的进位做加法运算,产生1位和和1位向更高位的进位。图中(a)是全加

    2024年02月06日
    浏览(31)
  • 二进制の简介

    二进制是一种计算机科学中常用的数字编码系统,它使用只有两种状态的符号(0和1),来表示所有的数字、字符、指令等信息。在计算机系统中,所有的数据都以二进制形式存储和处理。 二进制的基础概念是位(bit),一位只能表示0或1两种状态。然后,多个位组合在一起

    2024年02月10日
    浏览(25)
  • 【verilog】用七段数码管显示二进制编码的十进制数

    用七段数码管显示0~9,输入为四个信号,这四位二进制数表示十进制的0~9 图1 逻辑电路与七段显示器 图2 真值表 根据卡诺图,得出a~g的逻辑表达式: 硬件描述语言: 图4 代码编译成功 图5 电路图 图6 仿真波形 表1 端口管脚分配表 端口 使用模块信号 对应FPGA管脚 功能说明

    2023年04月25日
    浏览(40)
  • verilog实现二进制转BCD码-加3移位法

    BCD码用4位二进制数表示一个十进制数,最常用的BCD码是8421码,用4’b0000-4’b1001表示十进制数字0-9,接下来默认BCD码就是8421码。 在FPGA中使用数码管时,段选信号不好记,所以我们用BCD码表示一个数码管的数值,将BCD码转化为段选信号驱动数码管,数码管驱动可以这篇文章:

    2024年02月06日
    浏览(31)
  • 【FPGA】Verilog:二进制并行加法器 | 超前进位 | 实现 4 位二进制并行加法器和减法器 | MSI/LSI 运算电路

    0x00 并行加法器和减法器 如果我们要对 4 位加法器和减法器进行关于二进制并行运算功能,可以通过将加法器和减法器以 N 个并行连接的方式,创建一个执行 N 位加法和减法运算的电路。 4 位二进制并行加法器 4 位二进制并行减法器

    2024年02月05日
    浏览(43)
  • [FPGA]用Verilog写一个简单三位二进制加法器和减法器

    加法器和减法器是数字电路中的基本组件,它们可以对二进制数进行算术运算。加法器可以将两个或多个二进制数相加,得到一个和和一个进位。减法器可以将两个二进制数相减,得到一个差和一个借位。加法器和减法器可以用来实现更高级的运算,例如乘法、除法、移位等

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包