3D 机器视觉 02 - FPGA生成N位元格雷码
前言,FPGA是机器视觉里面经常用的的控制逻辑单元,并行处理速度快。
格雷码的生成方法中,通过异或的逻辑变化生成格雷码是最适合的方式。
举例一个位元为3的格雷码:
下面为一个位元为4的格雷码对比图
1 软件一般用递归法:
2 异或的方法:
2.1 标准的异或移位法:
前面几节我们讲过这个方法,小结一下:其实就是错位异或
2.2 异或乘除法:
2.2.1 编码:异或乘3后右移1位。
2.2.2 解码
3 FPGA源码:
3.1 实现模组代码
说明:pDataWidth 设定位元长度。
3.1.1 二进制到格雷码
//================================================================
// Filename : bin2gray.v
// Created On : 2017-05-14 16:54:30
// Last Modified : 2017-05-14 16:55:14
// Author : ChrisHuang
// Description : Converting Gray Code to Binary
//================================================================`timescale 1ns/1psmodule bin2gray
#(parameter pDataWidth = 4
)
(input [pDataWidth-1:0] iBinary,output [pDataWidth-1:0] oGrayCode
);assign oGrayCode = (iBinary >> 1) ^ iBinary;endmodule
3.2 仿真模拟的代码:
这里模拟要用到FPGA的模拟工具 ModelSim,详细请参考附件:
这里我们参考Chris写的一段:tb = testbench的代码
//================================================================
// Filename : bin2gray_tb.v
// Created On : 2017-05-14 16:54:30
// Last Modified : 2017-05-14 16:55:14
// Author : ChrisHuang
// Description : test Converting Gray Code to Binary
//================================================================`timescale 1ns/1psmodule bin2gray_tb();reg rClk;
reg [3:0] rBinary;
wire [3:0] wGray;initial
beginrClk = 0;rBinary = 4'b0;#500 $stop;
endalways #10 rClk = ~rClk;always @ (posedge rClk)
beginrBinary <= rBinary + 1'b1;
endbin2gray #(4) i1
(.iBinary (rBinary ),.oGrayCode (wGray )
);endmodule
写到ModelSim里面,仿真的时候,前面的模组代码也要加上。
1 compile/compile all
# Compile of GrayCode.v was successful.
2 simulate
为了simulate成功,需要把所有的模组都编译出来。放到一个文件里面编译方便一点:
//================================================================
// Filename : bin2gray_tb.v
// Created On : 2017-05-14 16:54:30
// Last Modified : 2017-05-14 16:55:14
// Author : ChrisHuang
// Description : test Converting Gray Code to Binary
//================================================================`timescale 1ns/1ps
module bin2gray
#(parameter pDataWidth = 4
)
(input [pDataWidth-1:0] iBinary,output [pDataWidth-1:0] oGrayCode
);assign oGrayCode = (iBinary >> 1) ^ iBinary;endmodulemodule gray2bin
#(parameter pDataWidth = 4
)
(input [pDataWidth-1:0] iGrayCode,output [pDataWidth-1:0] oBinary
);reg [pDataWidth-1:0] rBinary;always @ (iGrayCode)
beginrBinary[3] = iGrayCode[3];rBinary[2] = iGrayCode[2] ^ rBinary[3];rBinary[1] = iGrayCode[1] ^ rBinary[2];rBinary[0] = iGrayCode[0] ^ rBinary[1];
endassign oBinary = rBinary;endmodulemodule bin2gray_tb();reg rClk;
reg [3:0] rBinary;
wire [3:0] wGray;initial
beginrClk = 0;rBinary = 4'b0;#500 $stop;
endalways #10 rClk = ~rClk;always @ (posedge rClk)
beginrBinary <= rBinary + 1'b1;
endbin2gray #(4) i1
(.iBinary (rBinary ),.oGrayCode (wGray )
);endmodule
右键,compile -> compile all,编译一下,
编译后,会有3个模组,我们找_tb这个做仿真;
右键,选择simulate
这时候,出现了准备好的端口,
我们要比较二进制和格雷码,那么吧时钟,和4个码位的端口都选好。(选的时候,按住Ctrl键)
然后,右键,选择 add to (不是 add wave)\ wave \selected signals
弹出模拟仿真波形框
选一个周期5ms,在选择run,
按住ctrl + 鼠标可以变更周期,进行波形探查。
我们再比对一下,格雷码产生波形的正确性。
红色箭头为每个输出的字码周期的4位的数字,我们看到,前面3位的变化是符合格雷码的定义的。
参考:
1 格雷码的FPGA实现_ChrisHuang的博客-CSDN博客
2 FPGA攻略之Testbench篇 (eepw.com.cn)
3 Modelsim超级详细教程 手把手教一看就会 (Modelsim10.0 FPGA仿真软件 )_从零开始学单片机的博客-CSDN博客
4 格雷码原理与Verilog实现 - logic3 - 博客园 (cnblogs.com)
5 【原创】二进制码转格雷码互转换的FPGA设计-crazybird-电子技术应用-AET-中国科技核心期刊-最丰富的电子设计资源平台 (chinaaet.com)
6 verilog实现二进制和格雷码互转_搞FPGA的吕小春_新浪博客 (sina.com.cn)
3D 机器视觉 02 - FPGA生成N位元格雷码相关推荐
- Java 生成13位条形码 Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
package cn.zhang;import java.util.Scanner;public class Subject001 {/**生成13位条形码 Ean-13码规则:第十三位数字是前十二位 ...
- 每日练习------生成13位条形, Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
题目: 生成13位条形码 Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码. 例如:690123456789 计算其校验码的过程为: @前十二位的奇数位和6+0+2+4+6+8=26 ...
- 生成13位条形码 Ean-13码规则: 第十三位数字是前十二位数字经过计算得到的校验码。
public static void main(String[] args) {/** 生成13位条形码 Ean-13码规则: 第十三位数字是前十二位数字经过计算得到的校验码. 例如:69012345 ...
- (132)FPGA面试题-Verilog实现格雷码转二进制
1.1 FPGA面试题-Verilog实现格雷码转二进制 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog实现格雷码转二进制: 5)结束语. ...
- # 生成单色位二维码图_如何2个小时内学会ps抠图-纯干货
本人计划5个月成为设计师,现在从小白开始学起,每周会贴出学习内容总结,喜欢我分享的朋友可以关注我,进行交流哦. 今天花了两个小时学习了最常用的ps抠图流程以及工具使用. 学习前:ps界面每个工具乱点乱 ...
- 根据时间戳生成6位唯一邀请码
原文:https://blog.csdn.net/u012954706/article/details/84033576 import java.util.Random; /*** 邀请码生成器,算法 ...
- java 递归生成格雷码_格雷码的递归生成
问题:产生n位元的全部格雷码.html 格雷码(Gray Code)是一个数列集合,每一个数使用二进位来表示,假设使用n位元来表示每一个数字,任两个数之间只有一个位元值不一样. 例如如下为3位元的格雷 ...
- 4位格雷码的顺序编码_格雷码那点事——递归非递归实现
简介 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即"首尾相连",因此又称循环 ...
- 腾讯---生成格雷码
腾讯-生成格雷码 文章目录 腾讯---生成格雷码 一.题目描述 二.分析 三.代码 一.题目描述 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code ...
最新文章
- (转)jQuery禁止右键菜单,全选
- tableau必知必会之拖拽功能失效是怎么回事
- 远离极限编程 (Don’t do XP)
- Web APi之EntityFramework【CRUD】(三)
- oracle描述dept,一些关于oracle驱动表的描述
- 是引进外部函数吗_使用PowerBI的这两个函数,灵活计算各种占比
- cocos2dx-3.2 运行第一个android程序
- Python 之 sorted()排序详解 适用于任意可迭代对象比如列表,字典等
- php android 图片上传,android上传图片到PHP的过程详解
- Servlet和JSP的异同。
- GoF的23种设计模式分类概念
- arcgis python计算面积_如何在ARCMAP里面计算面积
- 原来找展会会刊(参展商名录)这么简单
- c语言身高和标准体重,c语言4-15 输出标准身高体重对照表
- 中国黑客生存特写,互联网金钱帝国里的英雄和盗匪
- 日拱一卒,集小胜为大胜; 学以致用,在战争中学习战争;
- 计算机专业英语听说,计算机专业英语听说(二).doc
- Java Shadowing 影子变量 影子声明
- 京东JOS API 接入使用笔记
- online python compiler_在线控制台编译器:Online Console Compiler
热门文章
- 【Day01】你有封装过 axios 吗?主要是封装哪些方面?如何中断 axios 请求?
- 【JavaScript】提取字符串里的分数,及计算平均分并与平均分比较输出
- 【Python】Python库之虚拟现实
- 【C语言】两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单,a说他不和x比,c说他不和x,z比,编写程序找出三对赛手名单。...
- C do...while 循环
- 给自己的网站添加复制提示代码
- 使用heroku托管服务搭建网站
- sqlachemy入门基础手册
- 原型制作是什么意思_制作电路原型的最佳方法是什么?
- svn差异查看器 编码_男女学习编码的9个差异