verilog - T触发器不会产生输出
问题描述
我已经制作了一些verilog代码和一个测试台来创建一个T触发器,但不能让输出改变为x以外的任何东西。我尝试在模块和测试台中将 o/p as reg 执行,然后将 tb reg 分配给电线,但没有奏效。不知道挂在哪里。
下面是触发器模块:
module Tflipflop(input T, S, R, En, clk, output reg Q, output Qn);
assign Qn = ~Q;
always@(posedge clk | R | S) begin
if(R == 1'b1)
Q <= 1'b0;
else if (S ==1'b1)
Q <= 1'b1;
else if (En==1'b1) begin
case(T)
1'b1: Q <= ~Q;
1'b0: Q <= Q;
default: Q <= Q;
endcase
end
else
Q <= Q;
end
endmodule
下面是测试台:
`timescale 1ns/1ps
module Tflipflop_tb();
reg T, S, R, En, clk;
wire Qn, Q;
Tflipflop TFF_1(.T(T), .S(S), .R(R), .En(En), .clk(clk), .Q(Q), .Qn(Qn));
initial begin
clk = 0; T = 1; S = 0; R = 0; En = 1; #5;
clk = 1; #5;
clk = 0; #5;
clk = 1; #5;
clk = 0; #5;
clk = 0; #5;
clk = 1; #5;
clk = 0; En = 0; #5;
clk = 1; #5;
clk = 0; #5;
clk = 1; #5;
end
endmodule
modelsim 中的仿真图片:
解决方案
您的 DUT 和测试台代码中有两个问题。
- DUT:使用事件
or
运算符,而不是按位布尔运算符。您不希望代码对表达式的上升沿敏感(clk | R | S)
。有关说明,请参阅此链接。 - TB:您需要设置
R
或设置S
为 1 以使翻牌摆脱未知状态。
推荐阅读
- raspberry-pi - 树莓派 + Bluez + A2DP + AVRCP
- html - 为什么 flex div 是父 div 的 100% 宽度?
- jquery - 输入空时jQuery文本输入实时验证清除错误
- visual-studio-code - 如何从 Visual Studio Code 扩展中的 globalState 获取 id?
- python - 如何从张量流数据集中生成动态数量的样本
- java - 如何在 Recycleview 中实现 onClick 监听器以打开不同的活动
- docker - Go App 工作但在 Docker 中 - JSON 输入意外结束
- reactjs - UI 框架与样式化组件在 React 中从头开始制作 UI?
- php - PHP 从 CSV 更新 MySQL 跳过错误行
- java - 在 Android 中读取/写入根文件夹的权限