
Verilog语言
文章平均质量分 76
摆渡沧桑
芯片算法架构师
算法设计/硬件设计/公钥密码/对称密码/抗量子前沿密码(抗攻击/同态/格密码)
展开
-
数字IC设计verilog编写——6脉冲同步器
数字IC设计verilog编写——6脉冲同步器脉冲同步器首先在源时钟域进行信号翻转,在跨时钟域到des_clk,并进行边沿检测,即为dec_clk时钟域的脉冲,实现脉冲同步;在实际的电路设计中,异步电路的设计在实际应用中的重要意义不言而喻。由于信号在不同时钟域之间传输,容易发生亚稳态的问题导致,不同时钟域之间得到的信号不同。处理亚稳态常用打两拍的处理方法。多时钟域的处理方法很多,最有效的方法异步fifo,异步fifo适合处理不同时钟域之间传输的数据组,但有时不同时钟域之间仅仅传递脉冲,异步f原创 2021-06-05 11:23:25 · 4494 阅读 · 2 评论 -
数字IC设计verilog编写——5无毛刺时钟MUX设计
1.Glitch Free技术在时钟切换时,需要涉及到时钟切换的MUX设计 glitch free技术(一种防止毛刺产生的多路选择器设计)问题无缝切换需要解决两个问题:一是异步切换信号的跨时钟域同步问题,需要同步电路原理消除亚稳态;二是同步好了的切换信号与时钟信号如何做逻辑,才能实现无毛刺。2.Glitch Free 技术原理下图显示了防止源时钟相互倍数的时钟开关输出出现毛刺的解决方案。在每个时钟源的选择路径中插入一个负边沿触发的D触发器。 在时钟的下降沿采样选择控制(SELECT),以及仅在原创 2021-05-03 17:24:18 · 3257 阅读 · 2 评论 -
数字IC设计verilog编写——4流水线握手协议
1 流水线与握手协议流水线在电路设计过程中,是必不可少的一种实现方式,其可以提高电路的性能,当我们需要设计高速电路的时候,就需要用到流水线;流水线的设计,就是指对延时较大的组合逻辑插入寄存器,把较大的组合逻辑拆分成几个时钟周期来完成,以提高系统的最大时钟频率。但是这样做,会导致数据输出的延时,假若插入一个寄存器,则数据输出就到产生一个时钟周期的延时,假若插入N个寄存器,就会产生N个时钟周期的延时;而握手协议能够确保数据的上游和下游能够正确的接收数据,握手协议的原则是:当Valid和Ready信号同时高原创 2021-04-30 20:58:39 · 7460 阅读 · 7 评论 -
数字IC设计verilog编写——3边沿检测
上升沿,下降沿检测电路,即针对输入信号的跳变进而输出判断结果,上升沿、下降沿可以分别进行寄存器打拍,而后相与或者相或;module edge_detect( clk, rstn, signal_a, pos_edge_flag, neg_edge_flag);input clk,rst;input signal_a;output pos_edge_flag, neg_edge_flag;reg signal_r原创 2021-04-26 14:09:57 · 854 阅读 · 0 评论 -
数字IC设计verilog编写——2如何优雅的写出分频器RTL设计(续)
上一篇文章介绍了有关分频器的RTL设计,有细心的读者可以发现RTL代码并不完善,如何对RTL改进,优雅的写出RTL,让面试官对你的coding style有深刻的印象,并认为你的基础扎实;下面先看这个例子:使用Verilog语言编写7分频的RTL设计:module div_old_7( //define div = N input clk, input rstn, output o_clk); parameter N = 7; reg原创 2021-04-24 18:24:22 · 886 阅读 · 0 评论 -
数字IC设计verilog编写——1分频器
本次介绍的主题是分频器的电路实现,包括偶数分频,奇数分频,以及任意整数的分频器的RTL编写;直接进入主题1.偶数分频首先给出任意偶数分频RTL(以6分频为例)(不完善的)module div_even #(parameter N = 6)( //define div = N input clk, input rstn, output o_clk); reg [m:0] cnt; //width m determined原创 2021-04-24 14:39:39 · 1210 阅读 · 0 评论 -
SoC芯片设计——为什么使用assign语句,来避免使用if-else或者case来设计电路。
0.介绍对于一块芯片的设计,尤其是芯片CPU内核,为什么你写的代码,别人不敢用,功能正确,验证通过,综合,编译通过,为什么还是没有人会使用?答案很简单,一个主要原因是,你写出的code,性能不高,风险较高,不满足严谨的工业级的开发标准。下面介绍一下,一个最基本的RTL编写原则——尽量使用阶梯式的assign语句来编写,代替if-else,case的编写。虽然if-else,case有很多优势,如:有优先级顺序;件覆盖率容易debug,这点对于验证来说,能够更快的debug出条件的覆盖率等1.原创 2020-09-27 14:25:38 · 8313 阅读 · 4 评论 -
SOC——Boundary scan模块的RTL代码设计(三)
SOC——Boundary scan模块的RTL代码设计(三)Boundary Scan Cell TypesBC_2_B Type CellBC_7 Type Cell Shown with BC_2_A Control Cell//module boundary_scan (// jtg_shiftdr, jtg_clockdr_in, jtg_updatedr, jtg_trst_n,...原创 2020-08-19 15:54:39 · 1587 阅读 · 0 评论 -
SOC设计——多时钟源切换MUX设计
在数字电路设计中,模块的运行时钟切换时,需要考虑到是否会产生毛刺,小小的毛刺有可能导致电路运行的错误。所以时钟切换时需要特别的处理。1.主要的结构框图:2.触发器关键部分源码:3. 源码module gf_ckmux #( parameter SRC_CLK_NUM = 2 //support 2/4/8)( input ...原创 2020-05-03 10:39:46 · 2688 阅读 · 4 评论 -
SOC设计——时钟切换的MUX设计 glitch free技术(一种防止毛刺产生的多路选择器设计)
SOC设计——时钟切换的MUX设计 glitch free技术(一种防止毛刺产生的多路选择器设计)0. 为何需要时钟Glitch Free技术在SOC的设计中,经常需要用到大量的时钟源的选择与切换,以及时钟的分频,其中对于时钟的切换就显得尤为重要,并且如何在切换时钟源的过程中消除毛刺(glitch)。对于时钟的分频技术后续会介绍。我们首先看一下如果不适用glitch free技术,来看时钟源...原创 2020-04-27 18:29:04 · 11482 阅读 · 3 评论 -
Verilog中的specify block和timing check
specify block用来描述从源点(source:input/inout port)到终点(destination:output/inout port)的路径延时(path delay),由specify开始,到endspecify结束,并且只能在模块内部声明,具有精确性(accuracy)和模块性(modularity)的特点。specify block可以用来执行以下三个任务:一、描述...转载 2020-03-25 17:13:41 · 5494 阅读 · 0 评论 -
Verilog HDL 中的UDP
Verilog HDL语言提供了一种扩展基元的方法,允许用户自己定义元件(User Defined Primitives,UDP)。通过UDP,可以把一块组合逻辑电路或者时序逻辑电路封装在一个UDP内,并把这个UDP作为一个基本的元件来使用。需要注意的是,UDP不能综合,只能用于仿真。一、UDP的定义与调用UDP定义的语法和模块定义类似,但由于UDP和模块同属于同级设计,因此,UDP定义不能出...原创 2020-02-22 15:34:23 · 1513 阅读 · 0 评论 -
Verilog基本语法——原语篇(Gate门)
Verilog中已有一些建立好的逻辑门和开关的模型。在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述。逻辑门:and (output,input,…)nand (output,input,…)or (output,input,…)nor (output,input,…)xor (output,input,…)xnor (output,input,…)缓冲...原创 2020-02-20 14:31:22 · 17657 阅读 · 1 评论 -
数字IC设计——FIR滤波器(二)(低通FIR滤波器的Verilog实现)
数字IC设计——低通FIR滤波器的Verilog实现(一)用Verilog实现一个3-tap低通FIR滤波器,输入输出为8bit无符号数,滤波器系数[1/4 1/2 1/4]module fir_lpf_3tap (input clk,input rst_n,input [7:0] din,output [7:0] dout);…endmodule这里3-Tap就是2阶滤波器。...原创 2019-12-03 20:20:41 · 9059 阅读 · 0 评论 -
数字电路基础知识——格雷码和二进制码的转换的算法和Verilog实现
这篇博客会再次详细分析一下数字IC设计中关于 **格雷码(Gray Code)** 的问题一、什么是格雷码二、为什么要用格雷码三、用格雷码实现FIFO指针四、 将格雷码转换为二进制1. 将格雷码转换为二进制2. 根据条件递增二进制值3. 将二进制转换为格雷码4. 将计数器的最终格雷码保存至寄存器中 四、由格雷码转换为二进制公式例:将格雷码转换为相等的二进制数Verilog 语言描述格雷码 五、由二进制码转换为格雷码六、格雷码计数逻辑的实现下图显示格雷码计数器的逻辑原理图:原创 2019-12-03 19:27:18 · 10687 阅读 · 1 评论 -
数字IC设计 FPGA——再谈乘法器设计(使用Verilog 原语 LUT 进行四位乘法器设计)
数字IC设计 FPGA——再谈乘法器设计(使用Verilog 原语 LUT 进行四位乘法器设计)乘法器同加法器一样,在数字信号的各种算法中被频繁的使用,并且对于整个系统的速度的影响是很大的。那么如何实现快速高效的乘法器关系着整个系统的运算速度和资源效率最大化的利用。乘法操作分为有符号操作和无符号操作两大类,无符号操作相对于一、乘法器架构1. 乘法器2. 乘法器结构二、乘法器的 Verilog 原语设计2. Verilog代码3. RTL结构图4. 仿真结果如下:5. 综合之后资源的利用原创 2019-11-06 17:30:44 · 11200 阅读 · 3 评论 -
数字IC设计 FPGA——再谈加法器设计(使用Verilog 原语 进行四位加法器设计)
数字IC设计 FPGA——再谈加法器设计(使用Verilog 原语 进行四位加法器设计)前面介绍了关于xilinx FPGA CLB的基本原理和结构,以及如何使用原语进行设计一、基于LUT3的四位加法器设计对于generate语句块,这是Verilog 2001语法中新增的语法,但需要注意generate-for语句:二、基于LUT5的四位加法器设计利用LUT3设计四位加法器的资源利用及延迟情况对于上面利用LUT3来设计加法器的情况,无论是资源使用情况还是延迟都两级形成四位全加器的资源利用和延迟原创 2019-11-02 11:19:41 · 9059 阅读 · 0 评论 -
数字IC设计——SRAM的Verilog语言实现(三)(双端口SRAM)
数字IC设计——SRAM的Verilog语言实现(三)(双端口SRAM)在FPGA设计中,经常会用到RAM。1)用Verilog实现一个同步双端口sram,深度16,位宽8bit。A口读出,B口写入。支持片选,读写请求,要求代码可综合。2)用Verilog实现一个异步双端口sram,深度16,位宽8bit。A口读出,B口写入。支持片选,读写请求,要求代码可综合。3)用Verilog实现一个同步双端口sram,深度16,位宽8bit。A口可读可写,B口可读可写。支持片选,读写请求,要求代码可综合。原创 2019-10-23 16:09:43 · 20663 阅读 · 19 评论 -
Verilog语言中case、casex、casez的用法和区别
Verilog语言中case、casex、casez的用法和区别casez与casex语句是case语句的两种变体, 在写testbench时用到。一、case、casex、casez的区别下表给出case、casex、casez的真值表二、case/casez/casex 在simulation/synthesis的区别Verilog语言提供的case语句直接处理多分支...casez和casex: 下面先给出 case, casez, casex 的真值表: 对于那些分支表达式原创 2019-10-19 23:59:47 · 58664 阅读 · 9 评论 -
数字IC设计——数组、存储器(Memory)的定义及Verilog语言实现(二)(存储器的读、取、及初始化赋值)
数字IC设计——SRAM的Verilog语言实现(二)(SRAM)在介绍SRAM的Verilog定义之前先介绍一下,Verilog关于数组的定义。Verilog中提供了两维数组来帮助我们建立内存的行为模型。如果要存储一个值到某个单元中去, 而如果要从某个单元读出值内存的初始化定义内存的初始化例子二、存储器在Verilog中的定义寄存器数组和寄存器的赋值为存储器赋值的另一种方法是使用系统任务转载 2019-10-17 21:42:13 · 28021 阅读 · 4 评论 -
数字IC设计——SRAM的Verilog语言实现(一)(单端口SRAM)
数字IC设计——SRAM的Verilog语言实现(一)(SRAM)一、用verilog实现一个深度为16,位宽8bit的单端口SRAM。搭建一个仿真环境,完成初始化,读取,写入的操作。存储器SRAM在Verilog中的定义3. 代码分析及注意事项引导语句“// synopsys translate_off原创 2019-10-14 23:08:50 · 27030 阅读 · 13 评论 -
数字IC设计——乘法器设计(三)(用Verilog实现两路数据的乘法运算,要求只使用1个乘法器)
数字电路基础知识——乘法器设计(三)用Verilog实现两路数据的乘法运算,要求只使用1个乘法器。module multiply( input clk, input rst_n, input sel_x, input [7:0] da_x, input [7:0] da_y, input [7:0] db_x, input [7:...原创 2019-10-08 21:51:32 · 2766 阅读 · 0 评论 -
数字IC设计——用Verilog实现序列检测器(有限状态机FSM)
数字IC设计-FPGA——用Verilog实现序列检测器(有限状态机)序列检测器:有“101”序列输入时输出为1,其他输入情况下,输出为0。画出状态转移图,并用Verilog描述。“101” 序列检测器序列检测器在数据通讯,雷达和遥测等领域中用与检测步识别标志。它是一种用来检测一组或多组序列信号的电路。例如检测器收到一组串行码{1110010}后,输出标志1,否则,输出0。二、“10101” 序列检测器三、序列检测器设计的思路步骤原创 2019-10-07 16:05:42 · 42583 阅读 · 7 评论 -
数字IC设计——用Verilog实现串并转换(移位寄存器)
数字IC设计-FPGA——用Verilog实现串并转换一、串转并转换模块1. 利用移位寄存器 2. 利用计数器input clk, rst_n, data_i;output [7:0] data_o;module Deserialize(input clk,input rst_n,input data_i,output reg [7:0] data_o);二、并转串转换模块原创 2019-10-05 20:11:02 · 18179 阅读 · 6 评论 -
数字电路基础知识——锁存器与触发器在Verilog中使用问题
一、 锁存器(latch)和触发器 (Flip-Flop,FF) 的区别锁存器与触发器总结下锁存器的主要缺点二、 在使用verilog 语言时描述触发器应注意的问题因此在使用Verilog中极易产生锁存器的情况有如下几种:always@(敏感列表)if 语句的使用中缺少 else 语句case缺少default语句即使if-else 语句完整并且是组合逻辑电路一定不会生成锁存器吗?三、使用Verilog避免生成锁存器应注意的事项原创 2019-09-29 15:42:46 · 4809 阅读 · 0 评论 -
数字电路基础知识——组合逻辑电路实现一些简单逻辑电路 (二)(用Verilog实现:统计序列1的个数,求三个数的最大值)
数字电路基础知识——组合逻辑电路实现一些简单逻辑电路 (二)(用Verilog实现:统计序列1的个数,求三个数的最大值)一、统计序列1的个数二、求三个数的最大值:原创 2019-09-27 20:14:06 · 6545 阅读 · 1 评论 -
数字电路基础知识——乘法器的设计(二)( 串行、流水线、有符号数八位乘法器)
数字电路基础知识——乘法器的设计(二)( 串行、流水线乘法器)前面一节关于乘法器的具体实现方式有很多种方法,均有各自的优缺点。本节将再介绍一下两种乘法器的设计,分别用Verilog语言实现串行和流水线乘法器。一、串行乘法器两个N位二进制数x、y的乘积用简单的方法计算就是利用移位操作来实现。二、流水线乘法器4位流水线乘法器的实现原创 2019-09-26 17:56:41 · 13886 阅读 · 2 评论 -
数字电路基础知识——组合逻辑电路之乘法器的设计(一)—— 并行、移位相加、加法树、查找表乘法器
数字电路基础知识——组合逻辑电路(乘法器的设计)乘法器的设计主要应用在数字信号处理和数字通信,本节主要介绍乘法器的四种实现方法。使用并行乘法器、移位相加乘法器、查找表乘法器、加法数乘法器。部分会涉及到寄存器时序逻辑电路。并介绍各自的优缺点。一、并行乘法器二、移位相加乘法器三、查找表乘法器四、加法器乘法器五、乘累加器原创 2019-09-24 22:34:33 · 38320 阅读 · 5 评论 -
数字电路基础知识——组合逻辑电路实现一些简单逻辑电路 (一)(用Verilog实现:绝对值函数运算(补码问题),取对数函数(移位寄存器),取整函数)
在数字逻辑设计中,本节介绍绝对值运算函数如何用Verilog硬件描述语言来实现,本质上是补码的问题。而取对数问题,可以归结为移位寄存器的问题。最后介绍一下取整函数的实现。一、用Verilog硬件描述语言来实现 取绝对值函数算法思路:function [7:0] abs; input [8:0] data_in; if(data_in[8]) abs=1+(~data[7:0]); else 二、取对数函数(求log以2为低的整数) 三、取整函数原创 2019-09-18 20:45:25 · 6450 阅读 · 1 评论 -
数字电路基础知识——组合逻辑电路(数据选择器MUX、多路复用器)
数字电路基础知识——组合逻辑电路(数据选择器MUX、多路复用器)数据选择器(MUX)二选一数据选择器用 2输入mux,实现与,或,非,异或三、 四选一选择器四、用选择器设计组合逻辑电路五、例:用Verilog描述一个多路复用器,输入的通道数目N,每一路的位宽为M。求log以2为低的整数的方法(使用移位寄存器、数据比较器)原创 2019-09-11 20:23:04 · 87126 阅读 · 3 评论 -
数字电路基础知识——组合逻辑电路(奇偶校验电路、数据比较器的设计)
数字电路基础知识——组合逻辑电路(奇偶校验器、比较器的Verilog设计)本次主要介绍组合逻辑电路中的奇偶校验电路以及比较器的设计,以及相干的实例来熟悉这两种电路。一、奇偶校验电路奇偶校验码奇偶校验码是比较简单的数据校验码,可以检测出一位错误,但是并不能确定错误的位置。如果数据中发生多位数据错误就可能检测不出来,更检测不到错误发生在哪一位;二、数据比较器原创 2019-09-09 12:40:18 · 25651 阅读 · 0 评论 -
数字电路基础知识——组合逻辑电路(译码器的设计、BCD译码器、3-8译码器)
数字电路基础知识——组合逻辑电路(译码器、数据选择器)数字电路中有很多基本常用的组合逻辑电路,如编码器、译码器、数据选择器、加法器、比较器。本次主要介绍译码器、数据选择器。并用Verilog语言设计简单的组合逻辑电路。一、译码器使用Verilog语言设计一个简单的组合逻辑电路(2-4译码器)设计BCD译码器,输入0~9。采用Verilog描述并画出门级电路图。(4线-10线译码器)原创 2019-09-07 15:44:07 · 11245 阅读 · 0 评论