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

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

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务