verilog
文章平均质量分 93
常见的一些verilog代码
summer_awn
这个作者很懒,什么都没留下…
展开
-
Design compiler综合教程
一、逻辑综合的主要步骤synthesis = translation + logic optimization + gate mappingDC工作流程主要分为这三步Translation :主要把描述RTL级的HDL语言,在约束下转换成DC内部的统一用门级描述的电路(Generic Boolean Gates)(DC自己的库表现),以GTECH或者没有映射的ddc形式展现。也就是说此阶段没有用到工艺库。Logic optimization :就是把统一用门级描述的电路进行优化,就是把路径调原创 2020-08-27 10:19:52 · 5485 阅读 · 1 评论 -
用verilog实现8bit乘法器(1)
输入:wire [7:0] din1, din2输出:reg [15:0] dout逻辑:组合逻辑此乘法器采用移位并相加的算法实现,占用面积比较大,还有很大的优化空间。verilog代码如下:module multi(input [7:0] din1,din2, output reg [15:0] dout);reg[3:0] i;always@(*)begin dout = 0 ; for(i = 0 ; i <8 ; i = i + 1) begin ..原创 2020-08-15 21:04:40 · 8317 阅读 · 1 评论 -
用verilog实现斐波那契数列发生器
斐波那契数列(0,1,1,2,3,5,8,13…)思路很简单,只用两个寄存器,根据斐波那契数列的特点,每次时钟到来时,把reg2赋值给reg1,把reg1和reg2相加赋值给reg2。因为是非阻塞赋值,不用额外的寄存器储存中间变量。verilog代码:module Fibonacci_generator(input rst_n, clk, output reg[15:0] dout);reg[15:0] reg1;reg cnt;always@(posedge clk, negedg原创 2020-07-08 10:57:55 · 4249 阅读 · 0 评论 -
用verilog实现去抖动电路(状态机实现)
题目:用Verilog实现按键抖动消除电路,抖动小于20ms,输入时钟10MHz。按键在按下的时候会有抖动特点,如果不加以处理,可能会被识别为多次按下,所以要设计去抖动电路。去抖动电路的核心思想就是通过计数器去计时,在按键按下的时候开始计数,当达到计数阈值时,再次判断当前的按键输入,如果开始和结束时一样,则判断为按键已按下,所以中间的时间段(本题为20ms)内不论按键发生了什么变化都无所谓本次程序是我第二次使用状态机实现,当然也可以不用状态机(上一次使用状态机是序列检测)电路共四个状态:.原创 2020-07-05 12:45:00 · 5950 阅读 · 3 评论 -
用verilog实现脉冲检测
代码思路和上一篇边沿检测基本一致,通过使用两个触发器,并结合逻辑组合实现检测但要注意题目里对pulse的定义是什么,本题中pulse是指一个时钟周期宽度的窄脉冲verilog代码:module pulse_detector(input clk, rst_n, din, output pulse_high_detect);reg q0,q1;assign pulse_high_detect = (~din) & q0 & (~q1);always@(posedge c原创 2020-07-03 14:05:08 · 6569 阅读 · 0 评论 -
用verilog实现边沿检测(上升沿,下降沿,双边)
不是很难却困扰过我的一个问题边沿检测?不是可以直接把待检测的信号写在always块里吗?其实不是的,这个题目的本意是在同步电路中实现这样的功能,如果把待检测的信号写在always块里面,相当于把输入信号接到了触发器的clk上,这样电路就变成异步的了,后面还需要把信号同步,得不偿失。正解是使用两个触发器,再通过逻辑组合判断边沿。边沿检测代码:module edge_detector(input clk, rst_n, din, output raising_edge_detect,fal原创 2020-07-03 13:59:48 · 13063 阅读 · 0 评论 -
用verilog实现异步fifo
本文实现了异步FIFO代码思路参考了博客 https://blog.csdn.net/u014070258/article/details/90052281之后可能会学习一下怎么利用状态机实现FIFO`define FIFO_DEPTH 108//FIFO深度`define FIFO_WIDTH 16//FIFO宽度module asynfifo(input rst_n,//复位信号input [`FIFO_WIDTH - 1:0] data_in,//输入信号 input w.原创 2020-06-29 19:53:33 · 601 阅读 · 0 评论 -
用verilog实现串行信号转8bit并行信号
串行信号转并行信号即为解串器(deserialize)。输入信号有时钟信号clk,复位信号rst和串行数据输入信号din。输出信号为8bit并行信号dout。每经过8个时钟周期,便把收到的8个串行信号合成并行信号并输出,等下8个时钟周期过后再输出下一个并行信号。verilog代码:module deserialize(input rst,clk,din,output reg[7:0] dout);reg[7:0] data;reg[2:0] cnt;always@(n原创 2020-06-18 19:02:35 · 4929 阅读 · 2 评论 -
用verilog实现异步复位、同步释放电路
相关重要概念:建立时间,保持时间;同步时序,异步时序;亚稳态;时序电路里面需要复位,异步复位相比于同步复位最大的优点就是可以节约资源。但是异步复位在上升沿时如果同时遇到时钟的上升沿,会不满足建立时间和保持时间的要求,从而使电路进入亚稳态。为了避免亚稳态,采用同步释放的解决方法。verilog代码:module ASRSR(input clk, rst, out);reg out1;reg out2;always@(posedge clk, negedge rst)beg原创 2020-06-17 23:05:31 · 4415 阅读 · 0 评论 -
用verilog实现数字频率计
数字频率计此设计是我在东南大学大三短学期数字系统课程设计的课题。(如果有学弟学妹看到这篇文章,希望可以给你们提供一定的帮助,但也希望别直接controlc,controlv)同时,本文中的代码因为经过再编辑,可能某些功能会有错误,敬请谅解。设计要求:(1)频率测量范围10Hz~1MHz(2)量程自动转换,量程分为10KHz (1s) 、100KHz (0.1s) 、1MHz (10ms)三档。转换规则如下:当读数大于9999时,频率计处于超量程状态,下一次测量时,量程自动增大一档;当读.原创 2020-06-15 15:24:11 · 22375 阅读 · 11 评论 -
用verilog实现加法器
用verilog实现加法器加法器是组合逻辑电路中的常见器件,了解其结构很有必要。解决加法问题的根本是解决进位问题,解决进位问题的根本是理解加法竖式。比如计算二进制加法1001(reg[3:0] in1) + 1101(reg[3:0] in2)。先计算个位in1[0]+in2[0] = 1+1,此时有两个输出,一个是最终结果的末位,应该输出0,这里记录out[0] = 0;还有就是下一位的进位,此时有进位,应该输出1,这里记录c[1] = 1。而在计算第二位的时候,应该是三个数相加in1[...原创 2020-06-13 14:18:52 · 7649 阅读 · 2 评论 -
通过状态机实现序列检测
如何实现对某一序列的检测?当序列中出现‘1101’时,输出‘1’,其余情况输出‘0’。通过有限状态机可以实现此功能。FSM(finite-state machine)是有限状态机,是指状态数为有限个的状态机。本题目中的待检测序列有4bit,对应4个状态,再加上闲置状态,总共有五个状态。状态转移图根据状态转移图可以编写verilog HDL代码,这里采用三段式写法。module SerialDetectorFSM(input wire clk, rst, data ,output原创 2020-06-13 13:33:49 · 3872 阅读 · 0 评论