fpga经典程序
文章平均质量分 65
宇哥啊
这个作者很懒,什么都没留下…
展开
-
Verilog对数据进行四舍五入(round)与饱和(saturation)截位
一、引言在利用Verilog写数字信号处理相关算法的过程中往往涉及到对数据的量化以及截位处理。而在实际项目中,一种比较精确的处理方式就是先对截位后的数据进行四舍五入(round),如果在四舍五入的过程中由于进位导致数据溢出,那么我们一般会对信号做饱和(saturation)处理。所谓饱和处理就是如果计算结果超出了要求的数据格式能存储的数据的最大值,那么就用最大值去表示这个数据,如果计算结果超出了要求的数据格式能存储的数据的最最小值,那么就用最小值去表示这个数据。这里先不给例子,下文会详细描述这种情况。为转载 2021-07-05 21:10:56 · 12008 阅读 · 5 评论 -
全加器和半加器设计
全加器AinBinCinSumCout0000000110010100110110010101011100111111和等于异或进位等于AB+AC+BC半加器AinBinSum000011101110和等于异或原创 2021-07-01 10:08:02 · 824 阅读 · 0 评论 -
键盘扫描程序
步骤:1、列输入0,行检测是不是全为0;2、行检测到0,一列依次为0,看行是不是还是03、如果是根据行和列的值判断是第几行第几列。Verilog HDL 4*4矩阵键盘扫描程序module key( clk, //50MHZ reset, row, //行 col, //列 key_value //键值);input clk,reset; input [3:0] row; output [3:0] col; output [3:0] key转载 2021-07-01 09:44:21 · 2591 阅读 · 2 评论 -
用加法实现乘法器实现
a乘bb的第n位是1的话,加a,如果是0,不变,然后左移一位,继续下一位计算。`timescale 1ns / 1psmodule div_top(input clk,input [3:0] a,input [3:0] b,output reg [7:0] ji);integer i;always@(*) begin for(i=0;i<4;i=i+1) begin if(a[i]) ji=ji+(a<<i); end endendmo原创 2021-06-27 18:28:04 · 2583 阅读 · 0 评论 -
FPGA上如何求32个输入的最大值和次大值:分治
上午在论坛看到个热帖,里头的题目挺有意思的,简单的记录了一下。0. 题目在FPGA上实现一个模块,求32个输入中的最大值和次大值,32个输入由一个时钟周期给出。(题目来自论坛,面试题,如果觉得不合适请留言删除)从我个人的观点来看,这是一道很好的面试题目:其一是这大概是某些机器学习算法实现过程中遇到的问题的简化,是很有意义的一道题目;其二是这道题目不仅要求FPGA代码能力,还有很多可以在算法上优化的可能;当然,输入的位宽可能会影响最终的解题思路和最终的实现可能性。但位宽在一定范围内,譬如8或者32转载 2021-06-27 17:35:40 · 563 阅读 · 0 评论 -
verilog除法器
FPGA除法器设计实现除法器设计需要注意:1、两个输入值最高位可能不是0,如4位的除数,但实际是4‘b00012、余数和商要和被除数位数一样,如除数为1,商等于被除数。3、要判断除数不等于0.原理:从被除数最高位开始,一次移一位,判断是否大于除数,大于除数,减去除数,商加1。程序:`timescale 1ns / 1psmodule div_top(input [15:0] a,input [7:0] b,output [15:0] shang,output [15:0] yu原创 2021-06-26 15:16:29 · 2807 阅读 · 1 评论 -
CRC校验原理和程序
1、简介CRC校验是一种在数据通信系统和其它串行传输系统中广泛使用的错误检测手段。通用的CRC标准有CRC-8、CRC-16、CRC-32、CRC-CCIT,其中在网络通信系统中应用最广泛的是CRC-32标准。特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。2、原理2.1 模2运算法则在CRC运算过程中会使用到模2除法运算。模2运算是一种二进制运算法原创 2021-06-20 20:55:11 · 2614 阅读 · 2 评论 -
单bit异步处理--电平同步、边沿同步、脉冲同步、握手信号
参考文章单bit信号跨时钟域你真的懂2-flop synchronizer吗-- CDC的那些事(2)常见数电面试题Pulse Synchronizer – CDC的那些事(3)电平同步(level synchronization)打两拍`timescale 1ns / 1psmodule level_syn(input clk1,input clk2,input rst_n,input in_data,output reg out_data );reg in_data原创 2021-06-12 16:10:48 · 3834 阅读 · 2 评论 -
序列检测器(moore、mealy、独热码三种写法)
序列检测器:检测110101目的:检测一个序列中是不是有序列110101Moore型状态机实现Moore型状态机:输出只由当前状态决定,即次态=f(现状,输入),输出=f(现状);状态转移图:程序:module head(input clk,input rst_n,input in,output out);parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6;reg [2:0] state;reg [2:0] next_state;alwa原创 2021-05-20 15:03:15 · 3810 阅读 · 0 评论 -
异步复位同步释放原理
参考文章异步复位同步释放原理异步复位,同步释放的理解异步复位同步释放—关于复位的问题always @ (posedge clk, negedge rst_async_n) if (!rst_async_n) begin rst_s1 <= 1'b0; rst_s2 <= 1'b0; end else begin rst_s1 <= 1'b1; rst_s2 <= rst_s1;原创 2021-05-19 19:42:04 · 1625 阅读 · 0 评论 -
深入理解FIFO以及同步FIFO和异步FIFO的verilog实现代码
FIFOFIFO即First In First Out,是一种先进先出数据存储、缓冲器,我们知道一般的存储器是用外部的读写地址来进行读写,而FIFO这种存储器的结构并不需要外部的读写地址而是通过自动的加一操作来控制读写,这也就决定了FIFO只能顺序的读写数据。下面我们就介绍一下同步FIFO和异步FIFO。1、FIFO分类同步FIFO,读和写应用同一个时钟。它的作用一般是做交互数据的一个缓冲,也就是说它的主要作用就是一个buffer。异步FIFO,读写应用不同的时钟,它有两个主要的作用,一个是实现数据转载 2021-05-19 09:55:18 · 5614 阅读 · 2 评论 -
序列信号发生器
Verilog 序列信号发生器的三种设计思路序列信号发生器:同步脉冲作用下循环地产生一串周期性的二进制信号的逻辑器件。例如产生:100111方法1:状态机选择格雷码,每个状态输出一位module divider_odd(input clk,input rst_n,input [5:0] in,//输入序列output reg out);reg [2:0] state;parameter s0=000,s1='b001,s2='b011,s3='b010,s4='b110,s5='b1原创 2021-05-18 16:04:09 · 6629 阅读 · 0 评论 -
分频(偶分频、奇分频、小数分频)
偶分频直接在一半时候翻转module divider_even(input clk,input rst_n,input [7:0] div,//分频系数output reg clk_div);reg [7:0] cnt;always@(posedge clk or negedge rst_n)begin if(!rst_n) cnt<=0; else if(cnt==div-1) cnt<=0; else cnt<=cnt+1; en原创 2021-05-16 17:12:14 · 715 阅读 · 0 评论 -
glitch free(时钟无毛刺切换)电路
知网:glitch free的时钟切换技术无毛刺切换要求1、都在低电平时切换2、没有亚稳态设计过程:方案1最先想到:module glitchfree(input clk1,input clk2,input select,output clk );assign clk=select?clk1:clk2;endmoduleview technology schematic这个是lut3内部结构图测试module tt; // Inputs reg clk1原创 2021-05-15 11:18:00 · 744 阅读 · 0 评论