Verilog语法与技巧
文章平均质量分 57
1
luoai_2666
这个作者很懒,什么都没留下…
展开
-
verilog中的for 循环
例1.module test(output reg [8:0] sumx ,input [4:0] x);parameter n = 3'd3;integer i ;always @ (*)begin sumx = 1 ; for( i=0; i<n; i=i+1 ) sumx = sumx + x ; endendmodule令x=3,仿真结果综合结果:for循环n次代表有n个相似的电路模块存在;代码上的“循环反馈”结构在阻塞赋值时代表前后原创 2021-09-19 16:54:01 · 19270 阅读 · 0 评论 -
verilog中组合逻辑避免Latch
文章目录Latch的含义组合电路中出现Latch组合电路中避免LatchLatch的含义D锁存器:控制信号C = 0时,输出信号被锁存;C = 1时,输出随输入信号而改变,就像通过了缓冲器。危害:1)输入信号如果多次变化,容易产生毛刺;2)在大部分 FPGA 的资源中,可能需要比触发器更多的资源去实现 Latch 结构;3)锁存器的出现使得静态时序分析变得更加复杂。应用:门控时钟(clock gating)的控制组合电路中出现Latch根本原因:在 if 语句、case 语句、问号表达式中转载 2021-08-10 21:17:57 · 1431 阅读 · 0 评论 -
有/无符号数乘法
移位与乘法左移n位等于原来的二进制数乘以2的n次方。比如00011010十进制是26,左移两位后是01101000转成十进制是104恰好是26的4倍。ps:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,否则会溢出。算术右移n位就是有符号位的除法,等于除2的n次方。逻辑右移n位就是有符号位的除法,等于除2的n次方。...原创 2021-08-03 18:19:49 · 2685 阅读 · 0 评论 -
有/无符号数加减法
有符号数和无符号数运算的位扩展当所有操作数和结果数据位宽一样时,有符号数和无符号数所产生的运算电路是一样的。当所有操作数和结果数据位宽不一样时,无符号数进行0扩展,而有符号数进行符号扩展。在verilog中支持无符号数和有符号数混合使用,当表达式右侧所有数均为符号数时,才进行符号位扩展,否则全部0扩展。8位有符号数8’b11111000,扩展成9位的有符号数,9’b1_1111_1000,很简单高位补1就行,扩成10位,就补2个1,不影响值。...原创 2021-07-23 15:15:34 · 8498 阅读 · 1 评论 -
逻辑移位和算术移位
对无符号/有符号数,逻辑左移和算术左移1位结果一样,均是依次左移1位,低位补0.对无符号数,逻辑右移和算术右移1位一样,依次右移1位,MSB补0.有符号数的逻辑右移和上面一样;有符号数的算术右移,MSB补的是符号位。结论:所有左移都一样;右移只有有符号数的算术右移不一样module shift(a,b);input [2:0] a;input signed [2:0] b;wire [3:0] left1_l,left1_a;wire signed [3:0] left2_l,l原创 2021-07-23 09:32:11 · 702 阅读 · 0 评论 -
FPGA中的复位
对于Xilinx的器件:虽然支持同步/异步复位针对 Xilinx 的 FPGA:(1)对于同一个触发器逻辑,因为同时支持异步和同步复位,所以异步复位并不会节省资源;(2)对于其他的资源,比如 DSP48 等,同步复位更加节省资源。首先,对于 DSP48,其内部还带有一些寄存器(只支持同步复位),如果使用异步复位,则会额外使用外部 Slice 中带异步复位的寄存器,而使用同步复位时,可以利用 DSP48 内部的寄存器;Xilinx 的 FPGA,对于 DSP48、BRAM 资源,使用同步复位比异步原创 2021-07-19 14:58:17 · 995 阅读 · 0 评论 -
Verilog语法基础
输入值会用到高阻态左移右移用于乘除运算和小数的运算原创 2021-07-04 14:31:38 · 134 阅读 · 0 评论 -
赋值语句及综合结果
本文讨论如何在Verilog中的实现不同的赋值,以及它们在逻辑综合中会推断出什么样的电路。1、当对同一个net,使用多个assign语句,会综合出什么样的逻辑?在可综合的verilog代码中,为同一个net使用多个assign语句是错误的。综合工具会报出语法错误,即“net is being driven by more than one source”。 例如,以下是错误的:图片但是,使用多个assign来驱动三态net 是合法的语句,如下示例所示:图片...转载 2021-07-03 13:55:05 · 997 阅读 · 0 评论 -
状态机的编码
有三种状态,使用独热码:parameter IDLE =3'b001;parameter ONE =3'b010;parameter TWO =3'b100;二进制码编码则为:2‘b00,2‘b01,2‘b10;而用格雷码编码则为:2‘b00,2‘b01,2‘b11独热码独热码的编码方式,每个状态数只有1比特为1,其余比特都为0,所以3个状态就要用3位宽的变量,也就是一共有几个状态数就需要几位宽的状态变量。为什么使用独热码?那就要从每种编码的特性上说起了,首先独热码因为每个状态只有1bi转载 2021-06-30 23:28:37 · 2566 阅读 · 0 评论 -
Verilog中的function与task
function和task的定义与调用都包含在一个module的内部,可以在一个module内把很大的程序模块分解成如果较小的任务和函数,使之便于理解和调试。function定义function [返回值类型或位宽] function_id; input_declaration other_declarations begin procedural_statement; endendfunction函数返回值的类型或位宽,是一个可选项,若没有指定,默认缺省值为 1 比原创 2021-06-30 21:33:30 · 1691 阅读 · 0 评论 -
波形对比方法
在testbench中分别例化参考模块和要比对的模块,然后加入代码:原创 2021-06-07 16:20:32 · 3682 阅读 · 0 评论 -
Verilog 常量类型
字符串(String)版权声明:本文为CSDN博主「FPGADesigner」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/FPGADesigner/article/details/102604599————————————————Verilog HDL同样也支持字符串的使用,使用双引号“”表示字符串内容,一个字符串必须放在一行内。在表达式和赋值语句中使用字符串,工具会将其视作无符号整数,一个字符对应一个8bi原创 2021-06-04 10:30:37 · 784 阅读 · 0 评论 -
FPGA的三态门
介绍三态是指其输出有三种状态:高电平(逻辑1)、低电平(逻辑0)和高阻态,有个使能端EN来控制门电路的通断。图中的sda信号声明为inout,当ENB为高电平时,sda由data_o驱动,是out。当ENB为低电平时,ENB控制的门电路处于高阻状态,相当于切断了data_o和sda之间的通路,此时,FPGA可从sda管脚读取外部数据,是in。三态门真值表:Verilog描述FPGA中设定一个信号为三态门,在Verilog中,就是设定该信号的类型为inout。input en;input原创 2021-06-03 21:12:40 · 3256 阅读 · 0 评论 -
Verilog 赋值
连续赋值assign针对wire,连线的值时会随着它的驱动源的变化而立刻变化。过程语句always针对reg型,基本格式always@(敏感信号条件表) 各类顺序语句;//always里的语句是顺序执行的1. always @(a or b) //a,b也可2. always @ (*)3. always @(posedge clock or posedge reset) 1是电平触发,在高或低电平保持的时间内触发,组合电路。2 是组合逻辑电路的描述方式;为了防止考虑不周全带来原创 2021-06-02 14:57:38 · 3041 阅读 · 0 评论 -
Verilog 循环语句
repeat连续执行n次initial begin data = 10; wdreq = 0;end#200;repeat (128)begin wrreq = 1; #20; data = data + 1; end200ps时,wrreq有效,此时data=10;220ps,data=11,开始重复,wrrreq保持1;240ps,data=12… 重复到128次时,wrreq=1,再过20ps,data=138,wrreq=0...原创 2021-05-24 20:52:18 · 456 阅读 · 0 评论 -
同步复位与异步复位
定义一、特点:同步复位:同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。always @ (posedge clk) begin if (!Rst_n) ...end异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。always @ (posedge clk or negedge Rst_n) begin if (!Rst_n) ...end目前我都是用异步复位,进一步的分析待后面再说。https://w原创 2021-05-20 15:27:47 · 365 阅读 · 0 评论 -
ERROR 总结
QuartusError (10028): Can’t resolve multiple constant drivers for net “prbs15[0]” at test.v(24)always @ (posedge clk or negedge rst_n) begin if(!rst_n) prbs15 <=15'b000_0000_0000_0001; else begin temp <= prbs15[14]^prbs15[13];原创 2021-05-10 21:41:03 · 2795 阅读 · 0 评论 -
Verilog 组合or时序语句中变量值的延时问题
module test( clk , rst_n , cnt0 , end_cnt0 );input clk ;input rst_n ;output reg [7:0] cnt0;wire add_cnt0 ;output wire end_cnt0 ; always @(posedge clk or negedge原创 2021-04-29 16:35:59 · 1032 阅读 · 0 评论 -
Verilog 条件语句if else
注意生成latch在时序逻辑中,不完整的 if…else… 结构并不会生成锁存器,而组合逻辑中不完整的 if…else… 结构就会生成锁存器。原创 2021-04-29 15:04:02 · 13452 阅读 · 0 评论 -
Verilog 运算符
移位运算符a >> n; 右移位运算符a << n; 左移位运算符a代表要进行移位的操作数,n代表要移几位。这两种移位运算都用0来填补移出的空位。左移,位宽增加;右移,位宽不变,低位需要截位。4'b1001<<1 = 5'10010;4'b1001>>1 = 4'b0100;...原创 2021-04-26 20:13:39 · 6726 阅读 · 1 评论 -
Verilog generate块
应用场景:很多情况下需要编写很多结构相同但是参数不同的赋值语句或者逻辑语句,如果在参数量很大的的情况下,原本的列举就会显得心有余而力不足。c语言中常用for语句来解决此类问题,verilog则为我们提供了generate语句。generate语句的最主要功能就是对module批量例化,对reg、assign、always、task等语句进行复制。分类:generate块可以分为generate for和generate if或者generate case。generate for格式:(1)必须使原创 2021-04-26 15:55:54 · 363 阅读 · 0 评论 -
Verilog 变量类型
wireregwire与reg标量,向量,数组1位宽,是一个标量。如果指定了范围,那么net或reg就变成了一个多比特的实体,称为向量。数组见memory。位选择addr [0] = 1; //单独选择addr [23:16] = 8'h23; //范围选择可变选择:可以在循环中有效地使用它来选择矢量的部分。虽然起始位可以改变,但宽度必须是恒定的。[<start_bit> +: <width>] // part-select increments from原创 2021-04-26 15:22:20 · 2747 阅读 · 0 评论 -
Verilog 参数
概述`define:作用 -> 定义常量可以跨模块、跨文件范围 -> 整个工程parameter:作用 -> 常用于模块间参数传递;范围 -> 本module内localparam 作用 -> 常用于状态机的参数定义;范围 -> 本module内有效,不可用于参数传递;localparam cannot be used within the module port parameter list.用法概念:可以跨模块的定义,写在模块名称上面,在整个.原创 2021-04-23 15:22:41 · 2530 阅读 · 1 评论 -
Verilog 变量初始化
reg型变量需要初始化方法:always来时钟,用复位信号rst控制(通常用方法1)定义时直接赋值,通常为0(没有复位信号时用方法2)示例:用计数器生成复位信号,将寄存器变量初始化为零://复位:1;工作:0module test(refclk,rst);input wire refclk;output reg rst;reg [2:0] time_cnt =3’d0;reg [2:0] time_cnt_n =3'd0;always@ (posedge refclk)beg原创 2021-04-23 10:59:07 · 16082 阅读 · 1 评论
分享