HDLBits刷题合集—18 Finite State Machines-4
HDLBits刷题合集—18 Finite State Machines-4
HDLBits-140 Exams/ece241 2013 q8
Problem Statement
实现一个Mealy型有限状态机,该状态机可以识别“101”序列,其输入信号命名为x。当检测到“101”序列时,状态机的输出信号将置为逻辑1。该状态机执行低电平有效的异步复位。它可能只有3个状态,而且可以识别重叠的序列。
状态转换图如下:
文章图片
代码如下:
module top_module (
input clk,
input aresetn,// Asynchronous active-low reset
input x,
output z );
reg [1:0] state, state_next;
parameter S0 = 2'd0, S1 = 2'd1, S2 = 2'd2;
always @(posedge clk or negedge aresetn)
begin
if (!aresetn)
state <= S0;
else
state <= state_next;
endalways @(*)
begin
case (state)
S0 : begin
if (x)
state_next <= S1;
else
state_next <= S0;
end
S1 : begin
if (x)
state_next <= S1;
else
state_next <= S2;
end
S2 : begin
if (x)
state_next <= S1;
else
state_next <= S0;
end
default:
state_next <= S0;
endcase
endassign z = (state == S2) & (x == 1);
endmodule
HDLBits-141 Exams/ece241 2014 q5a
Problem Statement
你将要设计一个单输入单输出串行的2进制补码器Moore型状态机。 输入(x)是一系列数字(每个时钟周期一个),从数字的最低有效位开始,而输出(Z)是输入的2进制补码。 状态机将接受任意长度的输入数字。该电路需要异步复位。 转换在reset低电平时开始,并在reset高电平时停止。
![HDLBits刷题合集—18 Finite State Machines-4](https://img.it610.com/image/info8/0ece7100d80f473c8f9f19daf26aa2cf.png)
文章图片
状态转换图如下:
![HDLBits刷题合集—18 Finite State Machines-4](https://img.it610.com/image/info8/a5715fb1d3d5463fa84b10f251932b8e.jpg)
文章图片
代码如下:
module top_module (
input clk,
input areset,
input x,
output z
);
parameter A=2'b00, B=2'b01, C=2'b10, D=2'b11;
reg [1:0] state, state_next;
always @(posedge clk or posedge areset)
begin
if (areset)
state <= A;
else
state <= state_next;
endalways @(state or x)
begin
case (state)
A: begin
if (x) state_next <= B;
elsestate_next <= A;
end
B: begin
if (x) state_next <= C;
elsestate_next <= B;
end
C: begin
if (x) state_next <= C;
elsestate_next <= B;
enddefault:state_next <= A;
endcase
endassign z = (state == B);
endmodule
HDLBits-142 Exams/ece241 2014 q5b
Problem Statement
下图是2进制补码器在Mealy型状态机上的实现。 使用独热码编码实现。
状态转换图:
![HDLBits刷题合集—18 Finite State Machines-4](https://img.it610.com/image/info8/0580b4790ac14d07b88f12bda952f894.jpg)
文章图片
波形图:
![HDLBits刷题合集—18 Finite State Machines-4](https://img.it610.com/image/info8/d7da9edc123f4211bf37e285c42eb61b.png)
文章图片
代码如下:
module top_module (
input clk,
input areset,
input x,
output z
);
parameter A=2'd1, B=2'd2;
reg [1:0] state,state_next;
always @(posedge clk or posedge areset)
begin
if (areset)
state <= A;
else
state <= state_next;
endalways @(*) begin
case (state)
A: begin
if (x)
state_next <= B;
else
state_next <= A;
end
B: begin
state_next <= B;
end
default: begin
state_next <= A;
end
endcase
endassign z = ((state == A) & (x == 1)) | ((state == B) & (x == 0));
endmodule
【HDLBits刷题合集—18 Finite State Machines-4】HDLBits-143 Exams/2014 q3fsm
Problem Statement
考虑一个输入为s和w的有限状态机。 假定FSM以复位状态A开始,如下所示。 只要s = 0,FSM就会保持状态A,而当s = 1时,FSM会进入状态B。一旦进入状态B,FSM就会在接下来的三个时钟周期中检查输入w的值。 如果恰好在这些时钟周期中的两个时钟周期中w = 1,则FSM必须在下一个时钟周期中将输出z设置为1。 否则z必须为0。FSM在接下来的三个时钟周期中继续检查w,依此类推。 下面的时序图说明了不同w值所需的z值。
使用尽可能少的状态。 请注意,s输入仅在状态A中使用,因此只需要考虑w输入。
![HDLBits刷题合集—18 Finite State Machines-4](https://img.it610.com/image/info8/3a68146c96d646ed8c2ee2733d4cd89c.png)
文章图片
代码如下:
module top_module (
input clk,
input reset,// Synchronous reset
input s,
input w,
output z
);
parameter A=0, B=1, C=2, D=3, E=4, F=5, H=6, L=7;
reg [2:0] state, state_next;
always @(*) begin
case (state)
A : begin
if (s) state_next = B;
else state_next = A;
end
B : begin
if (w) state_next = D;
else state_next = C;
end
C : begin
if (w) state_next = F;
else state_next = E;
end
D : begin
if (w) state_next = H;
else state_next = F;
end
E : begin
state_next = B;
end
F : begin
if (w) state_next = L;
else state_next = B;
end
H : begin
if (w) state_next =B;
else state_next = L;
end
L : begin
if (w) state_next = D;
else state_next = C;
end
endcase
endalways @(posedge clk)
begin
if (reset) state <= A;
else state <= state_next;
endassign z = (state == L);
endmodule
HDLBits-144 Exams/2014 q3bfsm
Problem Statement
给定如下所示的状态分配表,实现该有限状态机。 重置应将FSM重置为000状态。
![HDLBits刷题合集—18 Finite State Machines-4](https://img.it610.com/image/info8/92f382c098ce45df8afdd2e5823842fc.jpg)
文章图片
代码如下:
module top_module (
input clk,
input reset,// Synchronous reset
input x,
output z
);
parameter S0=0, S1=1, S2=2, S3=3, S4=4;
reg [2:0] state, state_next;
always @(*) begin
case (state)
S0 : begin
if (x) state_next = S1;
else state_next = S0;
end
S1 : begin
if (x) state_next = S4;
else state_next = S1;
end
S2 : begin
if (x) state_next = S1;
else state_next = S2;
end
S3 : begin
if (x) state_next = S2;
else state_next = S1;
end
S4 : begin
if (x) state_next = S4;
else state_next = S3;
end
default: begin
state_next = S0;
end
endcase
endalways @(posedge clk)
begin
if (reset) state <= S0;
else state <= state_next;
endassign z = (state == S3) | (state == S4);
endmodule
HDLBits-145 Exams/2014 q3c
Problem Statement
给定如下所示的状态分配表,请实现逻辑功能Y[0]和z。
![HDLBits刷题合集—18 Finite State Machines-4](https://img.it610.com/image/info8/0569c0ac9f3344b98e40c54add21d316.jpg)
文章图片
代码如下:
module top_module (
input clk,
input [2:0] y,
input x,
output Y0,
output z
);
parameter S0=3'b000, S1=3'b001, S2=3'b010, S3=3'b011, S4=3'b100;
reg [2:0] state_next;
always @(*) begin
case (y)
S0 : begin
if (x) state_next = S1;
elsestate_next = S0;
end
S1 : begin
if (x) state_next = S4;
elsestate_next = S1;
end
S2 : begin
if (x) state_next = S1;
elsestate_next = S2;
end
S3 : begin
if (x) state_next = S2;
elsestate_next = S1;
end
S4 : begin
if (x) state_next = S4;
elsestate_next = S3;
end
default: begin
state_next = S0;
end
endcase
endassign z= (y == S3) | (y == S4);
assign Y0 = state_next[0];
endmodule
Note
新手一枚,主要分享博客,记录学习过程,后期参考大佬代码或思想会一一列出。欢迎大家批评指正!
推荐阅读
- CSS3效果合集
- 刷题记录|【蓝桥必胜】试题 算法训练 kAc给糖果你吃-贪心排序
- 23班12月第二次作业雨合集
- 龙城四少出道合集(06)
- LeetCode刷题笔记|LeetCode刷题笔记 - 反转字符串
- 惊蛰节日
- 2019年奇葩新闻合集,个个都是人才(二)
- 2022年程序员面试谈薪技巧及Android面试题大合集,你想要的都在这~
- 2022年,程序员如何在面试前刷题,顺利入职大厂()
- 考研刷题小程序云开发实战-基础知识储备(1)