自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Q2b:Another FSM

该题的状态机共2输入2输出;当复位信号撤销时,在下一个周期内将f输出为1,需留意f为1持续一个周期;然后状态机取决于x的值,当x在连续的三个周期中产生值为1、0、1时,下一周期将g输出为1,在保持g为1时判断y的输入,如果y在两个周期中有任意一个周期为1了,那么g永久保持1;如果两个周期都没有1,那么g将永久保持0。上面是最开始我的想法,但这样不太好设计 f 的输出(上述代码中f的输出逻辑是错误的),解决方法是多加一个状态专门用来进行 f 的输出,称为fout。

2024-08-07 10:21:24 201

原创 3.2.5.21 Q3a:FSM

考虑一个具有输入s和w的有限状态机。假设 FSM 以称为A的复位状态开始,如下所示。只要s = 0, FSM 就保持在状态A ,当s = 1 时,它移动到状态 B。一旦处于状态B,FSM在接下来的三个时钟周期内检查输入w的值。如果w = 1 在恰好两个时钟周期中,则 FSM 必须 在下一个时钟周期中将输出z设置为 1。FSM 继续检查w接下来的三个时钟周期,依此类推。下面的时序图说明了不同w值所需的z值。使用尽可能少的状态。请注意,s输入仅用于状态A,因此您只需要考虑w输入。

2024-08-06 17:02:37 252

原创 3.2.5.15 Serial receiver and datapath

现在您有了一个有限状态机,可以识别何时在串行比特流中正确接收到字节,添加一个数据路径来输出正确接收到的数据字节。out_byte需要在done为1时有效,否则不在乎。实际上可以不用计数器,而在状态转移中直接将in输入给out_type。同样在设计输出上花费了很长时间,而且设计的输出很复杂。请注意,串行协议首先发送最低有效位。

2024-08-06 09:39:00 250

原创 3.2.5.14 Serial receiver

在许多(较旧的)串行通信协议中,每个数据字节都与一个起始位和一个停止位一起发送,以帮助接收器从位流中划定字节。一种常见的方案是使用 1 个起始位 (0)、8 个数据位和 1 个停止位 (1)。设计一个有限状态机,当给定比特流时,它将识别何时正确接收到字节。它需要识别起始位,等待所有 8 个数据位,然后验证停止位是否正确。如果停止位未按预期出现,则 FSM 必须等到找到停止位后再尝试接收下一个字节。状态转移没有问题,但输出逻辑总是写不对,在输出逻辑的设计上总是花费很长时间。

2024-08-04 18:50:11 231

原创 3.2.5.13 PS/2 packet parser and datapath

现在您有了一个状态机,可以识别 PS/2 字节流中的三字节消息,添加一个数据路径,该路径也将在收到数据包时输出 24 位(3 字节)消息(out_bytes[23:16]是第一个字节,out_bytes[15:8]是第二个字节,依此类推)。每当断言完成信号时, out_bytes 都需要有效。您可以在其他时间输出任何内容(即,不关心)。输出和状态转换分开写,如果写错了方便查找。

2024-08-04 16:24:33 172

原创 3.2.5.14 one-hot FSM

实现状态机的状态转换逻辑和输出逻辑部分(但不是状态触发器)。您在state[9:0]中获得当前状态,并且必须生成next_state[9:0]和两个输出。假设 one-hot 编码,通过检查推导逻辑方程。(测试台将使用非一个热输入进行测试,以确保您不会尝试做更复杂的事情)。假设此状态机使用 one-hot 编码,其中state[0]到state[9]分别对应于状态 S0 到 S9。除非另有说明,否则输出为零。单热状态转换逻辑的逻辑方程可以通过查看状态转换图的边缘来导出。

2024-08-04 15:42:03 237

原创 3.2.5.11 Lemmings 2

除了左右走动和碰撞时改变方向外,当ground=0时,旅鼠会摔倒并说“啊啊!当地面重新出现 ( ground=1 ) 时,旅鼠将继续沿与坠落前相同的方向行走。跌倒时被撞不影响行走方向,与地面消失(但尚未跌倒)同一个周期被撞,或仍在跌倒时再次出现地面时,也不影响行走方向。除了左右行走之外,如果地面消失在旅鼠脚下,旅鼠还会摔倒(并且可能会“啊啊!Vivado仿真应该没问题吧,有点懵。构建一个模拟这种行为的有限状态机。Vivado仿真却是对的。HDLbits仿真错误。

2024-08-03 17:59:51 157

原创 3.2.5.10 Lemmings 1

在旅鼠的 2D 世界中,旅鼠可以处于以下两种状态之一:向左行走或向右行走。如果遇到障碍物,它会切换方向。特别是,如果 Lemming 撞到左边,它会向右走。如果它撞到右边,它会向左走。如果它同时在两侧碰撞,它仍然会切换方向。Lemmings游戏涉及大脑相当简单的小动物。如此简单,我们将使用有限状态机对其进行建模。实现一个具有两个状态、两个输入和一个输出的摩尔状态机来模拟这种行为。

2024-08-03 15:54:45 266

原创 3.2.5.6 Simple one-hot state transitions 3

由于单热编码,测试“当前处于状态A”的逻辑方程只是状态A的状态位。这导致状态位A的下一个状态的最终逻辑方程:next_state[0] = state[0]&(~in) | state[2]&(~in)。虽然知道这个算法对于rtl级设计(逻辑合成器处理这个问题)是不必要的,但它说明了为什么单热fsm通常具有更简单的逻辑(以牺牲更多的状态位存储为代价),并且这个主题经常出现在数字逻辑课程的考试中。使用以下单热状态编码:A=4'b0001, B=4'b0010, C=4'b0100, D=4'b1000。

2024-08-01 19:03:39 699

原创 3.2.4.3 Conway‘s game of life 16*16

例如,角单元 (0,0) 有 8 个邻居:(15,1) , (15,0) , (15,15) , (0,1) , (0,15) , (1,1)、(1,0)和(1,15)。16x16 的网格由一个长度为 256 的向量表示,其中每行 16 个单元格由一个子向量表示:q[15:0] 为第 0 行,q[31:16] 为第 1 行,以此类推(此工具接受 SystemVerilog,因此您可以根据需要使用 2D 向量。“游戏”是在一个二维单元格上进行的,其中每个单元格要么是 1(活着),要么是 0(死去)。

2024-07-30 18:06:12 179

原创 Lfsr32

在位位置 32、22、2 和 1 处构建具有抽头的 32 位 Galois LFSR。这足够长,以至于您想要使用向量,而不是 32 个 DFF 实例。不太懂这题什么意思。

2024-07-29 18:30:12 242

原创 3.2.2.8 12-hour clock

reset将时钟重置为 12:00 AM。hh、mm和ss是两个BCD(二进制编码的十进制)数字,分别表示小时 (01-12)、分钟 (00-59) 和秒 (00-59)。您的计数器由快速运行的clk计时,只要您的时钟增加(即每秒一次),就会 在ena上显示一个脉冲。注意, 11:59:59 PM提前到12:00:00 AM,12:59:59 PM提前到01:00:00 PM。没有 00:00:00。以下时序图显示了从上午 11:59:59到下午 12:00:00的翻转行为以及同步复位和启用行为。

2024-07-29 00:29:21 200

原创 3.2.2.7 4-digit decimal counter

构建一个 4 位 BCD(二进制编码的十进制)计数器。每个十进制数字使用 4 位编码:q[3:0] 是个位,q[7:4] 是十位等。对于ena [3:1],还输出一个使能信号,指示个位,十位,百位何时应加1。这道题没有做错,但是调试了很长时间,原因是counter10的输出q没有设置成四位的reg [3:0]q,引以为戒。

2024-07-28 16:29:54 147

原创 3.2.2.6 Counter 1000

从 1000 Hz 时钟导出一个称为OneHertz的 1 Hz 信号,该信号可用于驱动一组小时/分钟/秒计数器的启用信号,以创建数字挂钟。使用模 10 (BCD) 计数器和尽可能少的其他门构建分频器。还要从您使用的每个 BCD 计数器输出使能信号(c_enable[0] 为最快的计数器,c_enable[2] 为最慢的)。为您提供以下 BCD 计数器。Enable必须为高电平才能使计数器运行。复位是同步的并设置为高以强制计数器为零。电路中的所有计数器必须直接使用相同的 1000 Hz 信号。

2024-07-28 10:59:40 173

原创 3.2.2.5 Counter 1-12

下面的 4 位二进制计数器 ( count4 ),它具有启用和同步并行加载输入(加载的优先级高于启用)。count4模块提供给您。在你的电路中实例化它。c_enable 、c_load和c_d输出是分别进入内部计数器的enable、load和d输入的信号。它们的目的是允许检查这些信号的正确性。c_enable, c_load, c_d[3:0]控制信号进入提供的 4 位计数器,它们的目的是允许检查这些信号的正确性。复位同步高电平有效复位,强制计数器为 1。Q[3:0]计数器的输出。

2024-07-27 19:45:07 543

原创 3.2.2.4 Slow decade counter

构建一个从 0 到 9 计数的十进制计数器,周期为 10。复位输入是同步的,应该将计数器复位为 0。我们希望能够暂停计数器,而不是总是在每个时钟周期递增,所以slowena输入指示计数器何时应该增加。这是一个带有启用控制信号的常规十进制计数器。

2024-07-27 19:43:10 270

原创 3.2.1.17 Edge capture register

每个输出位的行为类似于 SR 触发器:输出位应在 1 到 0 转换发生后的周期设置(为 1)。当复位为高电平时,输出位应在正时钟沿复位(为 0)。在下面示例波形的最后 4 个周期中,“reset”事件比“set”事件早一个周期发生,因此这里不存在冲突。对于 32 位向量中的每一位,在输入信号从一个时钟周期的 1 变为下一个时钟周期的 0 时进行捕捉。“捕获”表示输出将保持为 1,直到寄存器复位(同步复位)。在下面的示例波形中,为清楚起见,reset、in[1] 和 out[1] 再次分别显示如下。

2024-07-27 18:05:50 172

原创 3.2.1.16 Detect both edges

对于 8 位向量中的每一位,检测输入信号从一个时钟周期变为下一个时钟周期时发生变化(检测任何边沿)。输出位应在发生 0 到 1 转换后的周期设置。边沿检测,上升沿和下降沿。

2024-07-26 17:02:41 181

原创 3.2.1.15 Detect an edge

对于 8 位向量中的每一位,检测输入信号何时从一个时钟周期的 0 变为下一个时钟周期的 1(类似于上升沿检测)。输出位应在发生 0 到 1 转换后的周期设置。这里有些例子,为清楚起见,in[1] 和 pedge[1] 分别显示如下。

2024-07-26 16:20:34 423

空空如也

空空如也

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

TA关注的人

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