verilog
文章平均质量分 61
幸运学者
学渣一枚
展开
-
Verilog的带参数例化
模块电路module test#( parameter P1 = 1 , parameter P2 = 2 )//参数例化( input clk, input a, output b);//内部电路endmudule例化时修改参数定义的方式写法1:test #(.P1(3),.P2(4))u_test( .clk(clk), .a(a), .b(b));写法2:test #(3,4)u_test( .clk(原创 2021-09-22 15:42:08 · 8536 阅读 · 0 评论 -
Verilog的无符号移位运算(“>>“和“<<“)和算术移位运算(“<<<“和“>>>“)的设计
1.无符号移位1.1.基本设计我们在进行Verilog代码设计时经常会用到移位运算,对于无符号运算,我们只需要使用移位运算符("<<“和”>>")就能够实现移位的功能,这个很容易理解。如无符号左移时,接收寄存器要比源寄存器多出对应移位位宽。reg [3:0] reg1;reg [5:0] reg2;always@(posedge clk) reg2 <= reg1 << 2;//左移两位,reg2比reg1多出两位。 同理对于无符号右移时,只需要减原创 2021-09-21 11:45:41 · 6641 阅读 · 7 评论 -
Verilog设计技巧:function、generate的用法
function函数,我们可以按照C语言的函数的那样进行理解。软件的函数,我们在使用或设计的时候,函数名、输入和返回值是我们最为关注的。而对应硬件,函数名、输入、返回值,只不过一个是软件实现,一个是硬件电路。因此Verilog的函数的相关思想与软件非常相似,特点:1)不能有always块,也就是不考虑延时,一般都是使用for、case、if-else完成函数功能。2)至少有一个输入变量。3)只有一个返回值,且没有输出。5)函数可以调用其他函数,但是不能调用任务。用途:可用于仿真代码,也可原创 2021-08-30 21:22:27 · 2484 阅读 · 0 评论 -
Verilog取绝对值代码设计
取绝对值的时候肯定都是针对有符号数来取的,然后存入无符号数中。对于有符号数在寄存器中的存储,是默认最高位为符号位, 低位为数据位(正数源码,负数补码),对于正数,我们可以直接将数据赋给无符号寄存器(这个寄存器的位宽至少要大于或等于数据位)。而对于负数,我们需要对数据位取反加一,然后将数据赋给无符号寄存器。有的时候我们的这个无符号寄存器位数比较大的时候,若数据位负数,可以直接将有符号寄存器直接不考虑符号位取反加一。如上图,有符号寄存器在给下一级寄存器赋值的时候,对于最高位的符号位,是默认向高位补全的,就原创 2021-05-28 13:06:24 · 10458 阅读 · 2 评论 -
Verilog有符号和无符号运算设计分析
最近对这几种运算很困惑,主要是对于有符号数的运算的困扰,如果运算出现负数怎么办。原创 2021-05-28 01:11:48 · 6045 阅读 · 1 评论 -
FPGA复位电路设计学习分析
同步复位同步的意思就是与控制时钟保持同步,因此,在设计中,寄存器接收的复位信号有效是在时钟的边沿触发的。实际上同步复位在altera的芯片中,是与数据一同接入一个组合逻辑电路,然后通过该组合逻辑电路,将最终的数据接入寄存器输入端。如下设计一个简单的同步复位电路:module Verilog1( input clk, input rst_n, output reg a);always@(posedge clk)begin if(!rst_n) a <= 1'b0; else原创 2021-05-18 22:54:09 · 1287 阅读 · 1 评论 -
FPGA设计功能验证debug思路(待更新)
1.流水线设计debug仿真时出现同一信号在不同输入下,内部电路信号翻转出现不一致。首先对于控制信号,检查所有的控制信号是否都进行了流水线同步传输。检查数据处理电路中,数据赋值是否出现错误,选择电路是否出现错误。检查数据赋值时,左右两边的位宽是否一致,一定要避免左边寄存器位宽不足的情况,这样会导致右侧的计算结果不能正确传输。注意复位电路,在仿真的时候在不同的输入的情况下,可能会受到影响。...原创 2021-04-28 20:34:22 · 681 阅读 · 0 评论 -
FPGA设计之折叠思路
1.应用场景一般情况下我们使用FPGA处理数据时都是非常喜欢使用并行处理+流水线结构的,但是如果工程占用的乘法器、加法器资源量过多,导致资源不够用时,就需要考虑折叠的设计方案了,将多个相同的运算单元经过时分复用控制,使用一个运算单元来完成。当然这样做会导致处理速度变慢,但是能起到节省运算资源的作用,虽然当前很少用折叠的方案,但既然学了那就记录一下吧。2.折叠方法我直接上自己设计的例子吧,别的地方的理论方面都是清一色的二阶滤波器的例子,这个电路虽然很典型,但是对于我在学习的过程中理解起来非常痛苦,在看我原创 2021-01-23 10:56:24 · 1155 阅读 · 0 评论 -
quartus综合器接地线优化设计
计数器这里我写了两个计数器,计数器1,是现在常用的计数器设计方式;计数器2,是我在一些老旧的书里面看到的一种设计方式。module text( input clk, input rst, output reg [3:0] cnt1,cnt2);parameter kk = 4'd1;reg [3:0] cnt_next2;//计数器1always@(posedge clk or posedge rst) if(rst) cnt1 <= 4'd0; else cnt1原创 2020-11-12 20:33:25 · 1475 阅读 · 1 评论 -
FPGA模块例化以及输入输出端口定义
端口连接规则 将一个端口看成由相互链接的两个部分组成,一部分位于模块内部,另一部分位于模块外部。当在一个模块中调用(实例引用)另一个模块时,端口之间的连接必须遵守一些规则。1、输入端口:从模块内部来讲,输入端口必须为线网数据类型,从模块外部来看,输入端口可以连接到线网或者reg数据类型的变量。2、 输出端口:从模块内部来讲,输出端口可以是线网或者reg数据类型,从模块外部来看,输出必须连接到线网类型的变量(显式,隐式),而不能连接到reg类型的变量。3、输入/输出端口(必须为wire) 从模块内部来讲原创 2020-06-04 19:00:33 · 5998 阅读 · 0 评论 -
超前进位加法器门电路级 verilog代码设计
本文是基于门电路,使用verilog代码进行设计的超前进位加法器原创 2021-01-23 10:56:51 · 1861 阅读 · 0 评论 -
同步FIFO的verilog代码设计学习
读写数据都是使用同一个时钟进行控制,其中判断空满标志是用一个寄存器fifo_cnt保存未读出的数据数进行判断。// 输入:// clk_fifo 时钟信号,上升沿有效// resetn_fifo 复位信号,低电平沿有效// fifo_wr_data 输入数据// fifo_wr原创 2020-10-14 17:25:59 · 461 阅读 · 0 评论 -
verilog检测模块外部信号下降沿,边沿跳变设计方法
检测一个信号的下降沿时,当start_i产生一个下降沿时,start_clk会产生一个脉冲。wire start_clk;reg start_clk_delay;assign start_clk = ((!start_i)&&start_clk_delay); always@(posedge clk) start_clk_delay <= start_i;检测上升沿wire start_clk;reg start_clk_delay;assign start原创 2020-09-17 11:52:03 · 1359 阅读 · 0 评论 -
奇偶校验位学习理解
一个字节一般有8bit,若是需要进行奇偶校验需要添加一个码元,所以发送接收时是8位数据位,一位校验位。奇偶校验就是指每次发送接收的每一帧数据加上校验码之后1的个数是奇数还是偶数奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。它是由n-1位信息元和1位校验元组成,可以表示成为(n,n-1)。如果是奇校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为奇数个;如果是偶校验码,在附加上一个校验元以后,码长为n的码字中“1”的个数为偶数个。设:如果一个偶校验码的码字用A=[an-1,a.原创 2020-09-15 19:35:46 · 17875 阅读 · 0 评论