目录

写在前面

Finite State Manchines

2014 q3c

m2014 q6b

m2014 q6c

m2014 q6

2012 q2fsm

2012 q2b

2013 q2afsm

2013 q2bfsm


写在前面

HDLBits 刷题来到了最为重要的一部分---有限状态机,都说 Verilog 设计的精髓就是状态机的设计,可见状态机设计的重要性,通过三十多道的状态机的练习,可以更加熟悉状态机设计的要点,通常都设计为三段式,这样设计的状态机层次清晰且易于设计,时序上更为易懂。以下的解题方法不一定为最佳解决方案,有更好的方法欢迎提出,共同学习,共同进步!

Finite State Manchines

2014 q3c

给定如下所示的状态分配表,实现逻辑函数 Y[0] 和 z。

module top_module (input        clk,input [2:0]  y,input        x,output       Y0,output       z
);//状态申明
parameter  A  =  3'b000;
parameter  B  =  3'b001;
parameter  C  =  3'b010;
parameter  D  =  3'b011;
parameter  E  =  3'b100;reg  [2:0]   state;always @(*) begincase(y)A: beginif (x) beginstate = B;endelse beginstate = A;endendB: beginif (x) beginstate = E;endelse beginstate = B;endendC: beginif (x) beginstate = B;endelse beginstate = C;endendD: beginif (x) beginstate = C;endelse beginstate = B;endendE: beginif (x) beginstate = E;endelse beginstate = D;endenddefault: beginstate = A;endendcase
end//状态机第三段,结果输出,组合逻辑
assign Y0 = state[0];
assign z = (y==D) || (y==E);endmodule

m2014 q6b

考虑下面显示的状态机,它有一个输入 w 和一个输出 z

希望使用三个触发器和状态代码 y[3:1] = 000, 001, ..., 101 分别用于状态 A、B、...、F 来实现 FSM。显示此 FSM 的状态分配表。推导触发器 y[2] 的下一个状态表达式。只实现 y[2] 的下一个状态逻辑。

module top_module (input  [3:1]   y,input          w,output         Y2
);//状态定义
parameter   A  =  3'b000;
parameter   B  =  3'b001;
parameter   C  =  3'b010;
parameter   D  =  3'b011;
parameter   E  =  3'b100;
parameter   F  =  3'b101;reg  [3:1]   next_state;always @(*) begincase(y[3:1])A: beginif (w) beginnext_state = A;endelse beginnext_state = B;endendB: beginif (w) beginnext_state = D;endelse beginnext_state = C;endendC: beginif (w) beginnext_state = D;endelse beginnext_state = E;endendD: beginif (w) beginnext_state = A;endelse beginnext_state = F;endendE: beginif (w) beginnext_state = D;endelse beginnext_state = E;endendF: beginif (w) beginnext_state = D;endelse beginnext_state = C;endenddefault: beginnext_state = A;endendcase
endassign Y2 = next_state[2];endmodule

m2014 q6c

考虑下面显示的状态机,它有一个输入 w 和一个输出 z

对于此部分,假设一个单热代码分别与状态赋值 'y[6:1] = 000001, 000010, 000100, 001000, 010000, 100000,...,, 100000 一起使用。

为下一状态信号 Y2 和 Y4 编写逻辑表达式。(通过假设独热编码的检查来推导逻辑方程。测试平台将使用非独热输入进行测试,以确保您不会尝试执行更复杂的操作)。

module top_module (input  [6:1]    y,input           w,output          Y2,output          Y4
);assign Y2 = ~w & y[1];
assign Y4 = (w&y[2]) | (w&y[3]) | (w&y[5]) | (w&y[6]); endmodule

m2014 q6

考虑下面显示的状态机,它有一个输入 w 和一个输出 z

module top_module (input      clk,input      reset,     // synchronous resetinput      w,output     z
);//状态申明
parameter  A  =  6'b000001;
parameter  B  =  6'b000010;
parameter  C  =  6'b000100;
parameter  D  =  6'b001000;
parameter  E  =  6'b010000;
parameter  F  =  6'b100000;//定义现态和次态
reg  [5:0]    state;
reg  [5:0]    next_state;//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) beginif (reset) beginstate <= A;endelse beginstate <= next_state;end
end//状态机第二段,状态跳转,阻塞赋值
always @(*) beginnext_state = state;case(state)A: beginif (w) beginnext_state = A;endelse beginnext_state = B;endendB: beginif (w) beginnext_state = D;endelse beginnext_state = C;endendC: beginif (w) beginnext_state = D;endelse beginnext_state = E;endendD: beginif (w) beginnext_state = A;endelse beginnext_state = F;endendE: beginif (w) beginnext_state = D;endelse beginnext_state = E;endendF: beginif (w) beginnext_state = D;endelse beginnext_state = C;endendendcase
end//状态机第三段,结果输出,组合逻辑
assign z = (state==E | state==F);endmodule

2012 q2fsm

编写表示此 FSM 的完整 Verilog 代码。对状态表和状态触发器使用单独的 always 块。描述 FSM 输出,称为 z,使用连续赋值语句或 always 块。

module top_module (input      clk,input      reset,   // Synchronous active-high resetinput      w,output     z
);//状态申明
parameter  A  =  6'b000001;
parameter  B  =  6'b000010;
parameter  C  =  6'b000100;
parameter  D  =  6'b001000;
parameter  E  =  6'b010000;
parameter  F  =  6'b100000;//定义现态和次态
reg  [5:0]    state;
reg  [5:0]    next_state;//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) beginif (reset) beginstate <= A;endelse beginstate <= next_state;end
end//状态机第二段,状态跳转,阻塞赋值
always @(*) beginnext_state = state;case(state)A: beginif (w) beginnext_state = B;endelse beginnext_state = A;endendB: beginif (w) beginnext_state = C;endelse beginnext_state = D;endendC: beginif (w) beginnext_state = E;endelse beginnext_state = D;endendD: beginif (w) beginnext_state = F;endelse beginnext_state = A;endendE: beginif (w) beginnext_state = E;endelse beginnext_state = D;endendF: beginif (w) beginnext_state = C;endelse beginnext_state = D;endenddefault: beginnext_state = A;endendcase
end//状态机第三段,结果输出,组合逻辑
assign z = (state==E | state==F);endmodule

2012 q2b

假设一个独热代码与状态赋值 y[5:0] = 000001(A)、 000010(B)、 000100(C)、 001000(D)、 010000(E)、 100000(F)

为信号Y1编写一个逻辑表达式,它是状态触发器y[1]的输入。

为信号Y3编写一个逻辑表达式,它是状态触发器y[3]的输入。

(通过假设一个热编码的检查来推导逻辑方程。测试平台将使用非一个热输入进行测试,以确保您不会尝试执行更复杂的操作)。

2013 q2afsm

此 FSM 充当仲裁器电路,通过三个请求设备控制对某种类型资源的访问。每个设备通过设置信号 r[i] = 1 来请求资源,其中 r[i] 为 r[1]r[2] 或 r[3]。每个 r[i] 是 FSM 的输入信号,代表三个器件之一。只要没有请求,FSM 就会保持在状态 A 中。当发生一个或多个请求时,FSM 决定哪个设备接收使用资源的授权,并更改为将该设备的 g[i] 信号设置为 1 的状态。每个 g[i] 都是 FSM 的一个输出。有一个优先级系统,因为设备 1 的优先级高于设备 2,设备 3 的优先级最低。因此,例如,仅当设备 3 是 FSM 处于状态 A 时发出请求的唯一设备时,它才会收到授权。一旦设备 i 被 FSM 授予授权,只要其请求 r[i] = 1,该设备就会继续接收授权。

编写表示此 FSM 的完整 Verilog 代码。对状态表和状态触发器使用单独的 always 块,就像在讲座中所做的那样。描述 FSM 输出 g[i],使用连续赋值语句或 always 块。

module top_module (input          clk,input          resetn,    // active-low synchronous resetinput  [3:1]   r,         // requestoutput [3:1]   g          // grant
); //状态定义
parameter  A  =  4'b0001;
parameter  B  =  4'b0010;
parameter  C  =  4'b0100;
parameter  D  =  4'b1000;//定义现态和次态
reg  [3:0]   state;
reg  [3:0]   next_state;//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) beginif (!resetn) beginstate <= A;endelse beginstate <= next_state;end
end//状态机第二段,状态跳转,非阻塞赋值
always @(*) beginnext_state = state;case(state)A: beginif (r[1]) beginnext_state = B;endelse if (~r[1] & r[2]) beginnext_state = C;endelse if (~r[1] & ~r[2] & r[3]) beginnext_state = D;endelse beginnext_state = A;endendB: beginif (~r[1]) beginnext_state = A;endelse beginnext_state = B;endendC: beginif (~r[2]) beginnext_state = A;endelse beginnext_state = C;endendD: beginif (~r[3]) beginnext_state = A;endelse beginnext_state = D;endenddefault: beginnext_state = A;endendcase
end//状态机第三段,结果输出,组合逻辑
assign g[1] = state==B;
assign g[2] = state==C;
assign g[3] = state==D;endmodule

2013 q2bfsm

考虑一个用于控制某种类型电机的有限状态机。FSM具有来自电机的输入xy,并产生控制电机的输出fg。还有一个称为clk的时钟输入和一个称为resetn的复位输入。

密克罗尼西亚联邦必须按如下方式工作。只要置位复位输入,FSM 就会保持开始状态,称为状态 A。当复位信号被解除置位时,在下一个时钟边沿之后,FSM必须将输出f设置为1,持续一个时钟周期。然后,FSM 必须监视 x 输入。当 x 在三个连续的时钟周期中生成值 1, 0, 1 时,应在下一个时钟周期中将 g 设置为 1。在保持 g = 1 的同时,FSM 必须监视 y 输入。如果 y 在最多两个时钟周期内具有值 1,则 FSM 应永久保持 g = 1(即,直到重置)。但是,如果 y 在两个时钟周期内未变为 1,则 FSM 应永久设置 g = 0(直到重置)。

module top_module (input         clk,input         resetn,    // active-low synchronous resetinput         x,input         y,output        f,output        g
); //状态定义parameter   START  =  9'b000000001;
parameter   OUT_F  =  9'b000000010;
parameter   X_1    =  9'b000000100;
parameter   X_2    =  9'b000001000;
parameter   X_3    =  9'b000010000;
parameter   OUT_G  =  9'b000100000;
parameter   G_1    =  9'b001000000;
parameter   WAIT   =  9'b010000000;
parameter   G_0    =  9'b100000000;//现态和次态
reg  [8:0]   state;
reg  [8:0]   next_state;//状态机第一段,状态初始化,时序逻辑非阻塞赋值
always @(posedge clk) beginif (!resetn) beginstate <= START;endelse beginstate <= next_state;end
end//状态机第二段,状态跳转,阻塞赋值
always @(*) beginnext_state = state;case(state)START: beginnext_state = OUT_F;endOUT_F: beginnext_state = X_1;endX_1: beginif (x) beginnext_state = X_2;endelse beginnext_state = X_1;endendX_2: beginif (x) beginnext_state = X_2;endelse beginnext_state = X_3;endendX_3: beginif (x) beginnext_state = OUT_G;endelse beginnext_state = X_1;endendOUT_G: beginif (y) beginnext_state = G_1;endelse beginnext_state = WAIT;endendWAIT: beginif (y) beginnext_state = G_1;endelse beginnext_state = G_0;endendG_1: beginnext_state = G_1;endG_0: beginnext_state = G_0;enddefault: beginnext_state = START;endendcase
end//状态机第三段,结果输出,组合逻辑
assign f = state==OUT_F;
assign g = (state==OUT_G) | (state==G_1) | (state==WAIT);endmodule

【HDLBits 刷题 12】Circuits(8)Finite State Manchines 27-34相关推荐

  1. 【HDLBits 刷题】所有答案直达链接汇总

    写在前面 以下为HDLBits全部答案,有些题的解法不唯一,我的也许不是最优解,欢迎提出更好的想法,HDLBits总的来说比较适合初学者. HDLBits 答案汇总 Language [HDLBits ...

  2. 【HDLBits 刷题 10】Circuits(6)Finite State Manchines 10-17

    目录 写在前面 Finite State Manchines Lemmings1 Lemmings2 Lemmings3 Lemmings4 Fsm onehot Fsm ps2 Fsm ps2dat ...

  3. 【HDLBits 刷题 11】Circuits(7)Finite State Manchines 18-26

    目录 写在前面 Finite State Manchines Fsm serialdata Fsm serialdp Fsm hdlc Design a Mealy FSM ece241 2014 q ...

  4. 【HDLBits 刷题 9】Circuits(5)Finite State Manchines 1-9

    目录 写在前面 Finite State Manchines Fsm1 Fsm1s Fsm2 Fsm2s Fsm3comb Fsm3onehot Fsm3 Fsm3s Design a Moore F ...

  5. HDLBits刷题合集—9 Arithmetic Circuits

    HDLBits刷题合集-9 Arithmetic Circuits HDLBits-66 Hadd Problem Statement 创建一个半加器.半加器将两个输入(不带低位的进位)相加产生和和向 ...

  6. HDLBits刷题全记录(五)

    文章目录 Finite State Machines Simple FSM 1_1(asynchronous reset) Simple FSM 1_2(synchronous reset) Simp ...

  7. 【小罗的hdlbits刷题笔记4】从lemming4中的有限状态机debug过程中的一些感悟

    心累,debug过程就是很烦,先说一下结论:设置变量时一定要注意位宽,否则会出现截位导致输出结果出现bug 废话不多说,先上问题 *Although Lemmings can walk, fall, ...

  8. 【小罗的hdlbits刷题笔记5】基于fifo思想的fsm设计(Exams/2014 q3fsm)

    在写状态机时,经常会有检测输入信号波形的情况,这种情况下,如果采用三段式状态机书写,则需要通过穷举法把输入信号所有可能存在的情况书写出来,在检测一到两个周期的输入信号时工作量不会很大,但是在检测多于三 ...

  9. 刷题第一天| 704. 二分查找、27. 移除元素

    704. Binary Search 题目链接:Link: 704. Binary Search 思路链接:代码随想录数组-二分法 思路 找出low与high的中间值mid,将nums[mid] 与t ...

最新文章

  1. Ceph分层存储分析
  2. domino大百科常见问题总汇1(转载)
  3. 使用WebEx录制视频并转换为MP4
  4. 强化学习(十二) Dueling DQN
  5. Linux vim的w,q,!,/
  6. 学习Asp.net MVC相关资料
  7. 计算1~n之间所有奇数之和_所有奇数长度子数组的和
  8. Linux技术网站中文,Linux技术网站,putty工具,中文显示设置
  9. c++取临时文件夹_电脑C盘不足?学会删除这5个文件夹,能节省10G空间
  10. linux系统安装如何设置raid,在RAID磁盘阵列下如何搭建Linux系统
  11. python玩微信跳一跳_用python玩微信跳一跳
  12. 雷军:4G 手机已清仓,全力转 5G;QQ音乐播放中途插语音广告引热议;Wine 5.9 发布 | 极客头条...
  13. 阿里巴巴正式上线全球首个数据中心Open Channel SSD产品
  14. shiro-cas------本地配置cas为HTTPS登录
  15. python word转pdf linux_linux环境基于python语言docx转pdf
  16. 关于gite代码提交不显示绿格子的处理心得git
  17. 阿里云oss出现Unable to execute HTTP request: bucket.二级域名.域名: nodename nor servname provided, or not known
  18. 英特尔Sandy Bridge处理器深度解析
  19. mysql for mac 重置密码_Mac版,mysql重置密码
  20. 安卓 获取rtsp流 截屏_安卓星雨视频+星火电视盒子版+安卓文件闪传+安卓截屏大师...

热门文章

  1. 雨林木风 Ghost XP SP3 纯净版 V2013.04
  2. Fragment overlap problem
  3. GPU 编程 CPU 异同点_GPU(图形处理器) ARCHITECTURE的变迁史
  4. [Robust Tracking]视频跟踪MEEM — 多专家模型
  5. 微信小程序的分包加载
  6. 拼音爱好者的好消息:紫光V6发版
  7. 什么是心智,如何占领用户心智
  8. 学校计算机及班班通工作责任书,市北区qut班班通qut计算机管理使用规定细则.doc...
  9. 基于Android+SpringBoot+MySQL的外卖APP系统设计与实现
  10. 微信和支付宝是金融基础设施,而数字人民币是支付工具