题解 | #根据状态转移表实现时序电路#

根据状态转移表实现时序电路

https://www.nowcoder.com/practice/455c911bee0741bf8544a75d958425f7

!和~的区别

  • !是逻辑非运算符,它只能用于布尔类型的操作数,也就是1或0。它的作用是将操作数的值取反,也就是1变成0,0变成1。例如,!1的结果是0,!0的结果是1。
  • ~是按位非运算符,它可以用于任意位宽的操作数,它的作用是将操作数的每一位都取反,也就是1变成0,0变成1。例如,~2’b10的结果是2’b01,~4’b1100的结果是4’b0011。
  • !和~的优先级不同,!的优先级高于~,所以在混合使用时要注意加括号。例如,!~2’b10的结果是0,而!(~2’b10)的结果是1。

如何根据同步时序电路转换

1.画出状态图,表示时序电路的各个状态和状态之间的转换关系,以及每个状态对应的输出。

2.选择状态编码,给每个状态分配一个二进制数,根据状态的个数确定所需的触发器(或锁存器)的个数。

3.用状态编码替换状态图中的状态,得到转换表,表示当前状态、输入、下一个状态和输出之间的关系。

4.根据转换表,写出下一个状态和输出的逻辑表达式,可以用卡诺图或者代数方法进行化简。

5.用组合逻辑电路实现下一个状态和输出的逻辑表达式,用触发器(或锁存器)实现当前状态的存储时序电路

解题思路一:

定义两个寄存器Q1和Q0

Q1_n+1与Q1_n,Q0_n和A有关

Q0_n+1与Q1_n,Q0_n和A有关

Y的输出与Q1和Q0有关

`timescale 1ns/1ns

module seq_circuit(
      input                A   ,
      input                clk ,
      input                rst_n,
 
      output   wire        Y   
);

reg q1,q0;

always@(posedge clk or negedge rst_n)begin
    if(!rst_n)
        q0 <= 0;
    else
        q0 <= ~q0;
end
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)
        q1 <= 0;
    else
        q1 <= q1^q0^A;
end

assign Y = q0 & q1;

endmodule

全部评论

相关推荐

11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务