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

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

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

全部评论

相关推荐

白火同学:先说结论,对于一份实习简历来说,整体还是挺不错的,技术深度和广度都到位,找到一份中小厂的实习没啥问题。 再说说能优化的点吧。 1、量化结果,项目中很多工作量化一下结果给面试官的感受会更直观一些,也能体现你对应用该项技术的理解(在众多技术为什么要用它,运行性能或者说开发效率往往是一大考虑指标;而不是说大家做这种功能都用它,所以我用它)。 2、突出亮点,项目中可以从“工作职责”择一些“个人亮点”另写一块,优先去写开发过程中遇到的xx问题,使用xx技术达到xx效果,针对性去写一些疑杂难的功能,能带出你个人思考和解决的过程。
点赞 评论 收藏
分享
最喜欢秋天的火龙果很...:第一份工作一定要往大的去,工资低点没事。后面换工作会更好找,即使你去小公司,你也不可能不会换工作的。所以找大的去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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