设计一个具有一个输入X、一个复位输入信号RET和一个输出Z的时钟同步状态机(时钟输入clk),Z=1的条件:连续4个时钟脉冲触发沿X的值为1010。否则Z输出为0。
(1)画出状态图、列出状态表。(2)确定最少使用几个D触发器(3)写出状态分配表(4)写出状态方程、激励法方程和输出方程(5)画出电路图(6)用verilog代码实现并写出测试模块
数字逻辑电路——时钟状态机 (verilog)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 竹山全栈 2023-06-19 08:27关注
(1) 状态图和状态表如下:
状态表如下:
状态 X RET 下一状态 Z S0 S0 0 S1 0 S2 0 S2 1 S3 0 S3 0 S4 0 S4 1 S5 0 S5 0 S6 0 S6 1 S7 0 S7 0 S8 1 S8 0 S2 0 其中,S0为初始状态,RET为复位输入信号,Z为输出信号,'next state'表示下一状态。
(2) 最少需要3个D触发器来实现。
(3) 状态分配表如下:
当前状态/Z D2 D1 D0 S0/0 0 0 0 S1/0 0 0 1 S2/0 0 1 0 S3/0 0 1 1 S4/0 1 0 0 S5/0 1 0 1 S6/0 1 1 0 S7/1 1 1 1 S8/0 0 0 1 (4) 状态方程、激励函数、输出方程如下:
状态方程:D2=RET&Z&(
D1)&(D2)|(RET&(~Z)&D1&D2);激励函数:D1=X;
输出方程:Z=(D2&(
D1)&D0&(RET));(5) 电路图如下:
(6) Verilog代码如下:
module state_machine(input clk, input X, input RET, output reg Z); reg [2:0] D; always @(posedge clk) begin if (RET) begin D <= #1 3'b0; Z <= #1 0; end else begin D[2] <= #1 RET&Z&(~D[1])&(~D[2]) | (RET&(~Z)&D[1]&D[2]); D[1] <= #1 X; Z <= #1 D[2]&(~D[1])&D[0]&(~RET); D[0] <= #1 D[1]; end end endmodule
测试模块:
module testbench; reg clk, X, RET; wire Z; state_machine uut(clk, X, RET, Z); initial begin clk = 0; X = 0; RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 RET = 1; #1 RET = 0; #1 $finish; end always #10 clk = ~clk; endmodule
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 求大神教题,这个代码和讲解思路都怎么写呀,完全卡住了
- ¥15 基于ffmpeg 编码成yuv420p nv12的问题
- ¥15 python随机森林对两个excel表格读取,shap报错
- ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
- ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
- ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
- ¥15 VFP如何使用阿里TTS实现文字转语音?
- ¥100 需要跳转番茄畅听app的adb命令
- ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
- ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗