自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 HDLbits练习25 - Rule 110

注意在得到q[0]时需要将式子中的 ’ Right ’ 这个变量(即式中的 ’ R ’ )换成 ’ q_right ’ 以及在得到q[511]时需要将式子中的 ’ Left ’ 变量(即式中的 ’ L ’ )替换成 ’ q_left ’ 即可。用卡诺图表示出上述真值表,然后化简得到’ Center’ next state ’ 与前面三个变量的关系式,C。

2024-09-22 20:40:48 173

原创 HDLBits练习24 - Rule 90

这里在时序电路 ’ always ’ 块中使用 ’ for ’ 循环卡住了,一直记着使用 ’ for ’ 循环应该和 ’ generate ’ 搭配使用,但其实在时序电路中是不需要的。对于这种错位与、或、异或、同或的题目,用给出的参考答案的“移位”思想真是太妙了,而我只会傻傻的用for循环。

2024-09-22 20:05:36 116

原创 HDLbits练习23 - 3-input LUT ( Exams/ece241 2013 q12 )

移位寄存器的输入称为 S,S 连接到 Q[0] 的输入(最高有效位首先移入)。在使用 ’ case ’ 语句来通过’ A ‘、’ B ‘、’ C '这三个信号对 ’ Z ’ 信号进行选择输出时, ’ case ’ 语句不应该放在 ’ always '时序语句块中。对于Q这个8位的信号在进行移位处理时,因为和以往做的不太一样,以往是信号的最低位( Q[0] )被移出,输入信号被移入最高位( Q[7] ),本题相当于把 Q[0] 看成是Q的最高位,所以在使用拼接符 ’ {} ’ 对信号做移位处理时有点迷糊。

2024-09-20 20:19:44 221

原创 HDLbits练习22 - Shift register ( Exams/2014 q4b )

编写一个顶层 Verilog 模块(命名为 top_module)来实现移位寄存器,假设 n = 4。在顶层模块中实例化四个 MUXDFF 子电路的副本。假设你要在 DE2 板上实现该电路。将输出连接到红色指示灯 LEDR[3:0]将 clk 连接到 KEY[0],将 R 输入连接到 SW 开关,将 E 连接到 KEY[1],将 L 连接到 KEY[2],将 w 连接到 KEY[3]。

2024-09-20 19:36:52 209

原创 HDLbits练习21 - Shift register ( Exams/m2014 q4k )

怎么越简单的越不会写了呢。’ resetn ’ 信号是低电平有效,一点也没看见,还以为那个小圆圈代表电路连接。还是用 ’ {} ’ 拼接符,对信号做移位处理比较方便解题。

2024-09-20 19:10:00 170

原创 HDLbits练习20 - 32-bit LFSR ( Lfsr32 )

【这道题相对前面那个只有5个寄存器的LFSR的题目来说,复杂了一些些。也揭露了我在前面那一道题里使用的方法的弊端,对于寄存器个数少的题还可以那样写写,但个数一多显然就不行了。因此需要参考前面那道题给出的solution,先使用一个组合逻辑块,用于计算下一个值是什么。

2024-09-20 18:40:49 176

原创 HDLbits练习19 - 3-bits LFSR ( Mt2015 Lfsr )

为这个时序电路编写 Verilog 代码(可以使用子模块,但顶层模块必须命名为 top_module)。假设你要在 DE1-SoC 板上实现该电路。将 R 输入连接到 SW 开关,将时钟信号连接到 KEY[0],L 连接到 KEY[1]。将 Q 输出连接到红色指示灯 LEDR。异或和同或的符号总是弄混,卡在这个电路符号上,还一直在修改别的地方,花了超多时间…以后一定要看清,有个尖尖的是或!

2024-09-20 15:52:44 176

原创 HDLbits练习18 - 5-bit LFSR ( Lfsr5 )

Galois LFSR 是一种特定的结构,其中带有‘tap’的位置与输出位进行异或运算,来生成其下一个值,而没有‘tap’的位置则直接移位。下图显示了一个 5 位的最大长度 Galois LFSR,‘tap’位于第 5 位和第 3 位(‘tap’位置通常从 1 开始编号)。可以记一下这种设置 ’ tap ’ 位置的的线性移位寄存器,它的功能是假设输出信号有n位,则输出信号会每个 2^n - 1 个状态后重复出现,且全零状态永远不会出现。

2024-09-20 15:11:58 159

原创 HDLbits练习17 - Left/right arithmetic shift by 1 or 8 ( Shift18 )

对于正数而言,它的补码也即它的原码,7的原码(补码)为0111,它算术右移一位,先是符号位不变(仍为0),将111右移一位后,空出来的高位用符号位(0)来填充,即011,再加上符号位,结果为0011,所以7算术右移一位后为3。算术右移会将符号位(在此处为 q[63])移入,而不是像逻辑右移那样移入0。1001 算术右移一位时,符号位保持不变(仍为1),将001右移一位后,空出来的高位用符号位(1)来填充,即100,再加上符号位,结果为1100,所以-7算术右移一位后为-4。2’b10:右移1位。

2024-09-19 11:08:13 357

原创 HDLbits练习16 - Left/right rotator ( Rotato100 )

构建一个100位的左/右旋转器,具有同步加载和左/右使能功能。旋转器将从寄存器另一端移出的位移入,而不像移位器那样丢弃移出的位并移入0。如果使能,旋转器会将位在寄存器中循环旋转,而不会修改或丢弃它们。② 学习到了上一题的接法,对于有优先级区分的题目,直接利用 ’ if ‘、’ else-if ‘、’ else-if '来做。优先级最高的放在 ’ if ’ 中,依次使用即可。① 这一题和上一题的区别在于,这一题中(已右移为例),右移出去的比特位会从左边移入。2’b00 和 2’b11 不旋转。

2024-09-19 10:00:37 202

原创 HDLbits练习15 - 4-bits shift register ( Shift4 )

忘记了如何用代码实现异步复位,先是试了用两个 always 块来做,但似乎如果一个信号存在两个及以上的 always 块中时,便会报错 ’ Can’t resolve multiple constant drivers for net “q[3]” at top_module.v(11) File: ',翻译成中文是“无法解决信号 “q[3]” 的多个恒定驱动源”。③ ’ load ’ 信号的优先级高于 ’ ena ‘,使用 ’ if ’ 、’ else-if ’ 、’ else-if ’ 来实现。

2024-09-19 09:50:56 300

原创 Hdlbits练习14 - 12-hour clock ( Count clock )

注意时间增加不可以直接用 ’ ++ ',因为不管是秒、分或时,都是用的 8 位二进制来表示,比如,当秒增加到 09 (实际二进制表示为 8’b00001001,如果用 ’ ++ ',那时钟信号的下一个脉冲到来时,秒会变为 10(实际二进制表示为 8’b00001010),而我们想要的结果由二进制表示应该为 8’b00010000,两者是截然不同的。无论是由 12:59:59 AM (夜间)还是 12:59:59 PM (下午)增加到1点时,这个1点应该表示为 01:00:00 AM (或 PM )。

2024-09-18 11:12:12 279

原创 Hdlbits练习13 - 4-digit decimal counter ( Countbcd )

由提供的时序图可知,本该对 ’ ena ’ 清零的地方, ’ ena ’ 没有被清零。为什么要对 ’ ena ’ 清零,因为只有(最低位称之为第一位)第一位计到 9 , ’ ena[1] ’ 才能置 1,相应的只有第二位计到 9 , ’ ena[2] ’ 才能置 1,只有第三位计到 9, ’ ena[3] ’ 才能置 1,所以在第一位没有计到 9之前 ’ ena ’ 都要被清零。每个十进制数字使用 4 位编码:q[3:0] 表示个位数字,q[7:4] 表示十位数字,依此类推。

2024-08-25 19:48:02 310

原创 HDLbits练习12 -Exams/ece241 2014 q7b ( Counter 1000)

题目提供的BCD counter的模块中的enable输入信号至关重要,第一级 BCD counter 每计满 9 要向第二级的 BCD counter 进 1,因此第二级 BCD counter 工作由第一级 BCD counter 决定,即它的使能输入信号 ’ enable ’ 只有在第一级 BCD counter 的输出为 9 时才被置 1;还需要输出你使用的每个BCD计数器的使能信号(c_enable[0]表示最快的计数器,c_enable[2]表示最慢的计数器)。以下是提供给你的BCD计数器。

2024-08-24 21:01:53 396

原创 HDLbits练习11 - Counter 1-12 ( Exam/ece241 2014 q7a )

(如这题用于当复位信号为高或者计数器递增至12时,该信号置1使计数器的输入信号 ’ d ’ 变为 ’ 4’b0001 ’ ,再加载到 ’ Q ’ 中。当 ’ load ’ 信号为高时,在时钟的上升沿,计数器会将 ’ d ’ 输入的值加载到 ’ Q ’ (计数器的输出)中,而不是递增当前值。用途:在时钟上升沿触发的情况下,如果 ’ enable ’ 信号为高,计数器的值会递增,如果 ’ load ’ 信号为高,计数器将加载 ’ d ’ 信号的值。作用: ’ Q ’ 是计数器的当前值,也是模块的主要输出。

2024-08-23 15:12:23 245

原创 HDLbits练习10 - Slow decade counter ( Counterslow)

构建一个十进制计数器,计数范围从0到9(包括0和9),周期为10。复位信号为同步输入,应该将计数器重置为0。我们希望能够暂停计数器,而不是每个时钟周期都递增,因此。【出错的原因是没有考虑到清零的情况除了复位信号置1以外的溢出需要在递增控制信号 ’ slowena ’ 也为1时才会出现】输入指示计数器何时应递增。

2024-08-23 11:01:05 154

原创 HDLbits练习9 - Decade counter again ( Count 1 to 10 )

【扫一眼这个题目就以为是除了复位使得值变为1这点有所不同的简单的十进制加法器,结果错了,后面再认真看是从1加到10,所以溢出不应该清零,而是置1】制作一个计数器 1 到 10(包括 1 和 10)。复位输入是同步的,应将计数器复位为1。

2024-08-23 10:27:35 227

原创 HDLbits练习8 - Decade counter ( Count10 )

【①我写的和给出的solution相比要繁琐一些,可以把复位信号为1以及结果加到9这两个都会使得最终结果为0的条件放在一起,就不需要在else里面再嵌套if和else了。②看到这道题才反应过来一直记不住的十进制用字母d表示的原因,原来是因为decade这个单词!构建一个从 0 到 9(含 10)的十位计数器。复位输入是同步的,应将计数器复位为0。

2024-08-23 10:19:18 109

原创 HDLbits练习7 - Four-bit binary counter(Count15)

【给出的solution中,不需要对其溢出清零是因为在Verilog中先定义了信号 q 的长度,所以溢出会截断,比如 1111 + 1 = 10000,截断后保留低四位,即 0000,正好相当于溢出清零的作用】

2024-08-22 22:25:31 121

原创 HDLbits练习6 - Dual-edge triggered flip-flop

2024-08-22 20:40:35 89

原创 HDLbits练习5 - edge capture register

当复位为高电平时,应在正时钟边沿将输出位复位(至0)。在下面示例波形的最后 4 个周期中,“reset”事件比“set”事件早一个周期发生,因此此处没有冲突。【尝试了很多次,卡了大半天,最后发现完全可以列出真值表直接得到out的表达式,只不过需要注意的是,out 的值不仅与当前的 in 有关,还与前一个时钟周期的 in 有关,同时因为还需要保持,所以还与上一时钟周期的 out 有关】对于 32 位向量中的每个位,当输入信号在一个时钟周期内从 1 变为下一个时钟周期的 0 时进行捕获。

2024-08-22 16:54:55 164

原创 HDLbits练习4-detect both edges

【这个练习和上一个的区别在于它不仅要检测输入信号的上升沿还要检测下降沿,所以最后不需要再进行’ AND 与 '运算。

2024-08-22 13:29:01 122

原创 HDLbits练习3-Edgedetect

③’ pedge ‘的确延迟了一个时钟周期输出,因为在 Verilog 中,非阻塞赋值(’ <= ‘)是在时钟周期结束时更新的。因此,’ pedge '在当前时钟周期内不会立即反映当前的上升沿检测结果,而是在下一个时钟周期输出该结果。②检测上升沿,即输入信号由0变为1,一般用“异或”来得到检测结果,但是需要排除由1变为0使得异或结果同样为1的情况,所以最后再用“与 ADN”运算来确保无误;【①需要在时钟的上升沿时刻检测输入信号是否产生上升沿,如果是则在下一个时钟周期到来时用置1的输出信号表示;

2024-08-22 13:23:56 128

原创 HDLbits练习2

三个信号被定义为reg类型,在verilog中,reg类型的信号只能被用于在过程块中存储值,所以它只能在过程块语句中被赋值,而不能通过连续赋值语句来赋值。赋值为0,但是语法上有问题,会出现报错“ Can’t resolve multiple constant drivers for net ‘q1’ ”,原因是q。【注释掉的三行代码是错误的,原因是对于题目的理解“假设D触发器在工作前被初始复位为0”,以为需要有这样一个手动复位的过程。这三句代码虽然也是对q。这三个信号赋初值‘0’也完全没问题。

2024-08-21 22:41:38 160

原创 HDLbits练习1

为当前下一个状态,Qn为当前状态);然后JK触发器中的J连至D触发器的D,K连至。③D触发器如何转换为JK触发器:先明确D触发器的状态转移方程为 Q。【①从这里开始接触死去记忆里的“状态转移方程”、“状态转移方程”,JK触发器的状态转移方程为 Q。

2024-08-21 22:17:32 110

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除