数字IC刷题
我不吃辣条
这个作者很懒,什么都没留下…
展开
-
Verilog实现计算最大公约数和最小公倍数
解在求解最大公约数与最小公倍数时,通常使用辗转相除法计算得到最大公约数,然后利用两数之积除最大公约数得到最小公倍数;设计一个时序电路,输入2个无符号数,位宽可以通过参数DATA_W确定,输出这两个数的最小公倍数和最大公约数。则最小公倍数=34*20/2=340;所以最大公约数为2;...原创 2022-07-29 11:43:31 · 714 阅读 · 0 评论 -
veilog实现模5运算(低位先输入)
一个12bit的数,一个bit一个bit串行输入,并且低位优先,求它模5的余数。解解决这一问题的关键就是注意到2"模5的周期性,如下所示。可以看到,模5的周期为4,因此,我们可以设置一个模4的计数器,当该计数器为0时,对应余数应该为1,为1时余数为2,…这一系列数,模5的余数分别为1,2,4,3,1,2。...原创 2022-07-29 11:02:29 · 889 阅读 · 0 评论 -
单端口RAM实现FIFO
当wea拉高时,会将数据写入对应的地址,同时douta输出的数据与此时写入的数据是一致的,因此在读的时候需要重新生成对应的读地址给addra,并且disable掉wea。第一种办法采用两个单口RAM,两个单口RAM分开奇偶,相当于乒乓意思,然后再加一个REG,这样就把REG分开了。我的思路是遇到同时读写的时候就对写打一拍这个时候是对奇ram写入,然后下一拍在遇到同时读写那么同样打一拍后对偶ram写入。所以一个端口只读,一个端口只写,但是写入和读取的时钟可以不同,且位宽比可以不是11。...原创 2022-07-29 10:37:39 · 2165 阅读 · 0 评论 -
基于移位寄存器的同步FIFO
代码】基于移位寄存器的同步FIFO。原创 2022-07-28 21:26:58 · 1671 阅读 · 1 评论 -
独热码检测
然后我们再将A取反,然后~A在和P按位或,如果得到全为1的数据,则为独热码。如果不全为1则不是独热码(除A为零的情况)A序列为第i位为1的独热码则P的第i位到N-1位应该全为1,0到i-1位应该全部为0;将该数的所有bit相加,若和为1,则说明该数据为独热码;当序列不为独热码时得到的P不具有这样的性质;......原创 2022-07-28 21:04:25 · 1108 阅读 · 3 评论 -
检测最后一个匹配序列的位置
题目描述编写一个模块,输入一个64比特的比特流,识别匹配出101101的最后的位置,并输出位置信息。思路移位比较的思路进行比较,count计数输出位置信息;原创 2022-07-27 11:33:43 · 118 阅读 · 0 评论 -
AHB协议中hreadyout和hready_in的区别
上面这张时序图表明master有两笔写传输,第一笔传输为slave1(s1),传输类型为SEQ,在第一笔传输的第二个周期,也就是第一笔传输的dataphase,此时slave1没有准备好被写数据,因此把s1_hreadyout拉低,但此时slave2已经看到自己的NONSEQ传输了,而且slave2已经是准备好了的。重新拿上面的仿真图看一下,由于前一个周期的s1_hreadyout为低电平,所以s2的hready_in也为低电平,那么该周期s2不会对addr以及控制信号进行采样。就不会出现上面的问题。...原创 2022-07-27 10:27:41 · 1715 阅读 · 0 评论 -
同步复位,异步复位,异步释放同步复位
但此时第二级触发器不会立刻变高,它要么复位为0,要么跟随前一级触发器的输出Q1,而前一级触发器的输出Q1为0,因此,无论如何第二级触发器的输出都为0,而触发器1的输出,若稳定后Q1为1,那么rst_sync_n在下一个周期被拉高,实现同步释放;如果稳定后的Q1为0,那么下个周期rst_sync_n仍为0,但此时由于rst_async_n已经为高,所以Q1在下一个周期必为1,那么rst_sync_n在下一个时钟上升沿到来时被拉高,也实现了同步释放,只是晚了一个周期而已。结论是没有亚稳态,无需担心。...原创 2022-07-27 09:51:03 · 2116 阅读 · 0 评论 -
保留最高为1的位,其他位置零,或者保留最低为1的位,其他位置零
利用补码的原理可以取出最低为1的位,其他位置零;例如a=0101_1010,补码b=(~a+1)=1010_0110;结果:c=a^b=0000_0010;取最高位:1、先取a的逆序a*;2、c=(a*)^(~a*+1)3、d=c*;对c取逆序上代码:`timescale 1ns/1psmodule highbit1(); reg clk; reg rstn; parameter perd = 20; reg [5:0] din; reg [5:0原创 2022-04-25 22:22:32 · 694 阅读 · 1 评论 -
线性反馈移位寄存器 LFSR
参考连接:添加链接描述运算基础:模2运算;线性反馈移位寄存器用于产生可重复的伪随机序列PRBS,该电路由n级除法器和异或门组成;在k阶段,寄存器存在初值,(Rn-1, … R1, R0),称为seed在k+1阶段,寄存器的值变为:*k+1阶段Rn-1 = Rn-2Rn-2 = Rn-3…R0 = f(R1, R2, …, Rn-1) = (Rn-1gn)⊕(Rn-2gn-1)⊕…⊕(R0*g1)g0也就是说寄存器存储的结果 (Rn-1, … R1, R0) 每个时钟周期改变一次,其中R1原创 2022-04-25 21:13:27 · 8926 阅读 · 1 评论 -
轮询仲裁器
轮询仲裁器:每次访问结束后都会更新优先级;假设有四个请求A,B,C,D,某个时刻这4个请求的优先级为A>B>C>D,这个时刻将总线控制权交给C,则这个请求后的优先级修改为D>A>B>C,代码中以3请求为例:上代码:bus_arbitor:module bus_arbitor( input wire clk, input wire rstn, input wire singal_1, input wire singal_2, i原创 2022-04-25 20:21:19 · 1713 阅读 · 0 评论 -
数字IC手撕代码-奇偶校验
奇偶校验可以在数据的校验中用到,比如UART的校验位;计算原理:奇校验:指加上校验位后,使得整个数据中1的个数为奇数个。偶校验:指加上校验位之后,整个数据中1的个数为偶数个。我们来看一个4位的向量1010,它的1的个数是偶数个(2个),因此,如果是偶校验,那么校验位应该是0,如果是奇校验,校验位应该是1,而我们发现:0=1^ 0 ^1 ^ 0(偶校验)1=~(1^ 0 ^ 1^0)(奇校验)这不是巧合,而是一个普遍规律,因此,我们可以得到奇校验和偶校验校验位的计算公式:parity=^a (偶原创 2022-04-24 23:41:24 · 179 阅读 · 0 评论 -
手写一个序列发生器
题目:手写一个10110序列发生器方法1、通过循环移位方式实现方法2、通过状态机来实现废话少说上代码:方法1:module sequence_gen( input wire clk, input wire rstn, //input wire [4:0] seq_in, output reg seq);parameter seq_in=5'b01101;reg [4:0] shift_reg;always @(posedge clk or negedge原创 2022-04-24 23:28:50 · 380 阅读 · 0 评论 -
序列检测器方法和技巧
实现:方法1、状态机,方法2、移位寄存器,移位作比较即可亲可真卷原创 2022-04-24 21:27:23 · 207 阅读 · 0 评论 -
快到慢的跨时钟域处理
如果你写过异步FIFO,格雷码的传输就已经包括慢时钟域到快时钟域以及快时钟域到慢时钟域的处理方法了,自己之前的异步FIFO由于理解没到位,快时钟域到慢时钟域的处理也是打拍,原因是快时钟域的时钟频率不够快。所以debug没问题。步入正题快到慢常用异步握手。握手包括同步握手和异步握手;1、同步握手:AXI协议的VALID 和 READY信号就是同步握手关系;2、异步握手(参考除夕之夜微信公众号)同步逻辑设计中,脉冲信号是指从快时钟域输出的有效宽度小于慢时钟周期的信号。如果慢时钟域直接去采集这种窄脉原创 2022-04-24 21:17:33 · 4750 阅读 · 1 评论 -
CRC检错技术原理
**一、CRC检错原理**CRC(cyclic redundancy check/code):循环冗余检错技术/循环冗余校验码;《计算机网络 第五版》—谢希仁所著的教材通过例子对循环冗余检验原理的原理说明如下:在发送端,先把数据划分为组,假定每组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在所要发送的数据后面增加n位的冗余码,虽然增大了数据传输的开销,但却可以进行差错检测。当传输可能原创 2022-04-24 19:43:17 · 3737 阅读 · 0 评论