verilog编程基础
基础不牢地动山摇。学会从电路出发,分析需求,编程实现。
艺术家都是疯子
加油^0^~人生有梦各自精彩
展开
-
阻塞赋值和非阻塞赋值的区别
结果应该是很明朗的,在0时刻a赋值0,在10时刻b赋值1,在15时刻c赋值0,在35时刻d赋值010;在为赋值之前的时刻均为高阻态。非阻塞赋值可以理解为并行赋值。在0时刻就将所有结果都求出来了,如果内部条件(延时到了)满足,则从新赋值。原创 2023-05-25 16:46:04 · 120 阅读 · 0 评论 -
使用主从JK触发器实现一个四位的同步计数器
清零信号clear低电平有效,输入数据在clock上升沿锁存,下降沿输出。count_ena低电平时停止计数。原创 2023-05-25 11:26:44 · 3884 阅读 · 0 评论 -
100位二进制加法器--生成语句块和for循环
加法器将两个 100 位数字和一个进位相加,以产生 100 位和并执行。通过实例化 100 个完整加法器来创建 100 位二进制纹波进位。原创 2023-05-03 17:51:03 · 253 阅读 · 0 评论 -
分支预测以及错误回滚
当发生分支错误预测 ( = 1) 时,在完成错误预测的分支后,将分支历史记录寄存器与历史记录一起加载。这是错误预测的分支 () 与分支 () 的实际结果连接之前的历史记录。进行分支预测 ( = 1) 时,从 LSB 端移入以更新预测分支的分支历史记录。(是最年轻的分支的方向。构建 32 位全局历史记录移位寄存器,包括支持回滚状态以响应由分支错误预测引起的管道刷新。如果预测和错误预测同时发生,则错误预测优先,因为管道刷新也会清除当前正在进行预测的分支。是分支历史记录寄存器的值。原创 2023-05-24 11:57:09 · 147 阅读 · 0 评论 -
FSM:One-hot logic equations
假设使用以下单热编码,则通过检查推导出下一状态逻辑方程和输出逻辑方程:(S, S1, S11, S110, B0, B1, B2, B3, Count, Wait) = (10'b0000000001, 10'b0000000010, 10'b0000000100, ... , 10'b1000000000。原创 2023-05-23 22:41:59 · 168 阅读 · 0 评论 -
100个BCD数的加法器--生成语句块和for循环实现
实例化 100 个副本bcd_fadd以创建 100个BCD数的行波进位加法器。分别输入400位的BCD码即100个bcd数,输出400位的结果和一位进位。原创 2023-05-03 22:06:18 · 247 阅读 · 0 评论 -
组合逻辑电路
画卡诺图,化简,得出输出为一的是中间四个和边角四个。原创 2023-05-18 16:57:33 · 47 阅读 · 0 评论 -
Gates and vectors
门级电路的用法原创 2023-05-04 16:18:24 · 91 阅读 · 0 评论 -
100位二进制数的加法RTL级实现
前面写了一个门级实现,需要实例话全加器100次,多少有点繁琐,这里我们使用RTL级实现一下(也就是直接使用加法器),但是这里有一个难点,就是如何简单高效的计算出最高位的进位cout呢?下面我会给出我的做法,但是感觉有待改善。其实整个always语句块都是用来求cout的。但是好像非这样做不可,因为每一位都会产生进位,每一位的进位都会影响最高的进位,这里我感觉没办法了已经,如果有读者想到更好的解决方案欢迎交流。原创 2023-05-04 20:39:55 · 140 阅读 · 0 评论 -
模块添加子--加法减法器
可以通过选择性地否定其中一个输入来从加法器构建加法器-减法器,这相当于反转输入然后加 1。最终结果是一个可以执行两个操作的电路:(a + b + 0)和(a + ~b + 1)。原创 2023-05-03 15:11:25 · 169 阅读 · 2 评论 -
12hour-clock
使用八位BCD码表示时分秒计数值,边界为12:00:00,即从12:00:00到11:59:59算一天,用一位标志位pm来代表白天还是黑夜,计满一轮12个小时pm变化一次。reset会将时分秒设置为12:00:00(am)用pm==0来表示am。原创 2023-05-08 15:30:42 · 48 阅读 · 0 评论 -
串行接收器
设计一个有限状态机,该状态机将在给定比特流时识别何时正确接收字节。它需要识别起始位,等待所有8个数据位,然后验证停止位是否正确。如果停止位未按预期出现,则 FSM 必须等到找到停止位后再尝试接收下一个字节。每个数据字节都与起始位和停止位一起发送,以帮助接收器从位流中分隔字节。使用一个起始位 (0)、8 个数据位和 1 个停止位 (1)。当没有传输任何内容(空闲)时,该线路也处于逻辑 1。原创 2023-05-18 10:41:19 · 88 阅读 · 0 评论 -
Lemmings旅鼠
这里也有一个值得注意的点:cnt的计数,这里计的是下落时间,但是有可能会超过20还没到地面也就不会跳转到死亡状态,这里的逻辑很关键,是我们落地时判断cnt有没有到20而不是当cnt到20时判断有没有落地。这两种判断会使状态机运行结果不一致导致错误。这里有个问题值得注意一下:aaah的取值选择state状态是为了保持时钟同步,如果使用ground作为判断的话会发现比预期早一个时钟周期跳变。原创 2023-05-17 16:02:26 · 54 阅读 · 0 评论 -
设计一个控制水位的状态机
这个题目意思有点模糊,经过参考其他文章才明白意思,目的就是要将水位保持在最高的状态。可以将水库的水位分成六个状态,一个是超出最高阈值(关闭阀门),一个是低于最低阈值(需要放水,打开所有阀门),还有就是处于s1s2之间以及处于s2s3之间,又可以细分为水位上升至s1s2之间和水位下降至s1s2之间,s2s3同理。fr1 fr2 fr3相当于阀门,例:当低于S1时需要带开所有阀门,当高于S3时要关闭所有阀门。dfr是一个状态位,如果水位下降(前一状态是下降)的话dfr置1,表示我们需要打开阀门了。翻译 2023-05-16 16:50:41 · 237 阅读 · 0 评论 -
1KHz计数器到1Hz计数器
例化1KHz的BCD计数器,来实现1Hz的十进制计数器原创 2023-05-08 11:35:06 · 595 阅读 · 0 评论 -
FSM one-hot next-state logic
对于这部分,假设一个独热代码与状态赋值 'y[6:1] = 000001、000010、000100、001000、010000、100000、这里使用组合逻辑会出现部分点不对的问题,不知道为什么。为下一个状态信号 Y2 和 Y4 编写逻辑表达式。 分别用于状态 A、B,..., F。原创 2023-05-22 10:19:31 · 124 阅读 · 0 评论 -
256选1多路选通器
位切片,mux256to1原创 2023-05-04 16:55:34 · 191 阅读 · 0 评论 -
Rule110电路
有一个一维单元格数组(开或关)。在每个时间步长中,每个单元格的状态都会发生变化。将左记为l,右记为r,中心记为c,最后化简出来的表达式是:res = c&~(l&r) + (~l&r) + (l&r&~c);思路:将表格用卡诺图化简求出电路表达式。分类讨论一下边界问题即可得出答案。原创 2023-05-14 15:25:37 · 251 阅读 · 0 评论 -
FSM next-state logic
000, 001, ..., 101 分别用于状态 A、B、...、F 来实现 FSM。显示此 FSM 的状态分配表。假设您希望使用三个触发器和状态代码。派生下一个状态表达式。原创 2023-05-22 10:21:24 · 56 阅读 · 0 评论 -
双边缘触发器电路实现
双边缘触发器电路实现原创 2023-05-06 15:43:46 · 179 阅读 · 0 评论 -
Mux纠错
通过实例化三个2选1Mux实现一个4选1的Mux。原创 2023-05-18 16:38:47 · 50 阅读 · 0 评论