
Verilog Code
文章平均质量分 79
WitransFer
努力成为ICer,重芯开始
展开
-
双边沿D触发器
问题遇到一个特别有意思的问题,链接: hdlbits.,其中模块描述如下:module top_module ( input clk, input d, output q);要求根据d信号的输入,输出q,但是d信号是在clk信号的双边沿变化,而q需要偏移d的半个周期,并跟随d的值变化。解决1?难道always语句同时在上升沿和下降沿捕捉信号d?verilogmodule top_module ( input clk, input d, ou原创 2021-04-02 14:50:21 · 3645 阅读 · 2 评论 -
verilog code 编写技巧
适合协议操作通过某些协议而对某些寄存器操作,例如通过AMBA协议对寄存器操作。只要instruction_set和instruction_clear能够条件互斥,即满足instruction_setinstruction_clear01清除10设置00保持11无效原来有点像锁存器的概念了。 assign instruction_set = //写某些寄存器 A的指令 assign instruction_clear = //写原创 2021-03-30 21:54:31 · 634 阅读 · 0 评论 -
同步和异步fifo设计
同步fifo设计信号列表clk:fifo操作时钟wr_en:fifo写使能,在wr_en有效的情况下,上升沿采集wdata数据。wdata:fifo写数据。full:fifo满有效。高电平时,代表当前wdata并未写入fifo。rd_en:fifo读使能。在rd_en有效,empty无效时,数据同步送出fifo。empty:fifo空有效。高电平时,代表当前rdata无效。要点使用两个地址寄存器,分别为raddr和waddr,假设fifo深度为8,则地址位置从0原创 2021-03-30 21:32:40 · 741 阅读 · 0 评论 -
BCD加法
16bitBCD加法BCD编码就是用4的位二进制来代表一个10进制的位 即BCD10010000BCD_{10010000}BCD10010000码代表98,而二进制代表152。充分利用模块思想,16bit的BCD加法可以由4个4bitBCD加法组成。module top_module( input [15:0] a, b, input cin, output cout, output [15:0] sum ); wire [2:0] cout_temp;原创 2021-03-21 13:33:19 · 1621 阅读 · 0 评论 -
跨时钟同步电路
亚稳态当信号跨时钟域传输时,很容易出现亚稳态状态,亚稳态是一种既不是0也不是1的中间态,如果亚稳态在电路中一级一级传输下去,将导致整个电路工作不正常。亚稳态无法完全消除,一般都用故障间隔时间来描述。只要间隔时间足够大则可以认为亚稳态不会发生。这里唯一能调整的就是tMETt_{MET}tMET。如下图,要使得tMETt_{MET}tMET越大,只能使图中得TdataT_{data}Tdata最够小,因此在跨时钟域处理时,中间不能串任何组合电路。双锁存器法相当于将信号打2拍,第一个时钟,即使当原创 2021-03-20 23:38:25 · 300 阅读 · 0 评论 -
补码溢出判断
补码可以将减法转化为加法,但有些电路需要判断加法是否溢出。判断方法判断加法是否溢出的条件是最高有效位和符号有效位。判断情况对于Nbit的二进制数,符号位为最高位,最高有效位为符号位的低1位。加法有四种情况[正]+[负][负]+[正][正]+[正][负]+[负]其中[负]+[正] 和[正]+[负]是一定不会溢出的,但是它们的符号位进位和有效位进位有可能有变化。所以也需要考虑进来。判断枚举以4bit的二进制为例,正大Pmax_4 = 0111 (7)正小Pmin_4 = 0001 (7原创 2021-03-20 22:37:20 · 3582 阅读 · 0 评论