使用数据流模型的T触发器

2023-12-12

我正在尝试模拟 t-flipflop 的工作。

`timescale 1ns / 1ps
module t_flipflop(
input t,
input clk,
input clear,
output q,
output qbar
);

 wire sbar, rbar;
 
 assign sbar= ~(t & clk & qbar & clear);
 assign rbar= ~(t & clk & q);
 
 assign q= ~(sbar & qbar);
 assign  qbar= ~(rbar & q & clear);
endmodule

现在,在输出中,当 t=1 时,q 的值会切换,但 qbar 的值始终为 1。

同样,当 t=1 时,q 始终为 0,qbar 为 1。

我究竟做错了什么?

测试治具:

`timescale 1ns / 1ps
module test_t_flipflop;

// Inputs
reg t;
reg clk;
reg clear;

// Outputs
wire q;
wire qbar;

// Instantiate the Unit Under Test (UUT)
t_flipflop uut (
    .t(t), 
    .clk(clk), 
    .clear(clear), 
    .q(q), 
    .qbar(qbar)
);

initial begin
    clear=1'b0;
    #34 clear=1'b1;
end

initial begin
    
    t=1'b0;
    clk=1'b0;
    forever #15 clk=~clk;
end

initial begin
    #10 t=1;
    #95 t=0;
    #40 t=1;
end 

output signals

我想用数据流模型来实现这一点,以便清楚地理解它。


您正在尝试使用连续分配来建模顺序逻辑。这可能会导致不可预测的模拟结果。例如,当我使用 Incisive 运行您的代码时,它会导致无限循环,这通常表明存在竞争条件。我认为比赛是由于反馈路径造成的:q依赖于取决于qbar这又取决于q.

对顺序逻辑进行建模的正确方法是使用以下寄存器传输逻辑 (RTL) 编码风格:

module t_flipflop (
    input t,
    input clk,
    input clear,
    output reg q,
    output qbar
);

assign qbar = ~q;

always @(posedge clk or negedge clear) begin
    if (!clear) begin
        q <= 0;
    end else if (t) begin
        q <= ~q;
    end
end
endmodule

这消除了反馈路径,并通过消除内部连线简化了代码。也可用于合成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用数据流模型的T触发器 的相关文章

  • 使用数据流模型的T触发器

    我正在尝试模拟 t flipflop 的工作 timescale 1ns 1ps module t flipflop input t input clk input clear output q output qbar wire sbar
  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • 「Verilog学习笔记」游戏机计费程序

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点 刷题网站用的是牛客网 timescale 1ns 1ns module game count input rst n 异位复位信号 低电平有效 input clk 时
  • 如何生成异步复位verilog总是阻塞凿子

    Chisel 始终生成敏感度列表中仅包含时钟的块 always posedge clk begin end 是否可以将模块配置为使用异步重置并生成这样的始终块 always posedge clk or posedge reset begi
  • 如何在verilog中逐行读取文本文件?

    我有一个 SREC 文件 它是一个简单的文本文件 我想在 verilog 中逐行读取它 我怎样才能做到这一点 以下读取文件 每个时钟周期 1 行 预期的数据格式是每行一个十进制数 integer data file file handler
  • 使用 Verilator 和 VPI 读取寄存器数组

    所以我在我的verilog中定义了以下寄存器 reg 31 0 register mem 0 15 verilator public 我的目标是从我的 verilator c 代码中读取存储在其中的 16 个值中的每一个 我发现有关 VPI
  • 连接分层模块:SystemVerilog 中的结构与接口

    在 SystemVerilog 中 分层模块可以通过简单数据类型 复杂数据类型 结构 联合等 或接口进行连接 我感兴趣的功能是将两个模块之间的所有信号聚合到一个地方 这简化了代码的维护 例如 在下面的例子中 更改 s point 的定义而不
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • 从测试台访问 uvm_config_db 的最佳方式?

    我想在我的顶级测试平台中创建一个时钟 其周期可以通过测试进行控制 我所做的是将周期设置到 uvm config db 中并将其返回到测试台中 我必须输入 1 以确保构建阶段已完成 否则 get 返回错误值 module testbench
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • 对象 <名称> 未声明

    这是我的代码 据我所知 LEDs被定义为 module sevenseg LEDs in output reg 6 0 LEDs input 3 0 in always in begin case in 0 LEDs 7 b1000000
  • 开始后跟冒号和变量是什么意思?

    什么是data mux意思是这里 它只是块的名称吗 if PORT CONFIG 32 P0 1 b1 begin data mux end 这些是块名称 它们特别适用于generate块 例如 您可以定义一个generate块如 genv
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • 标识符必须用端口模式声明:busy。 (Verilog)

    我有如下所示的 Verilog 代码 当我编译它时 我收到以下错误消息 并且代码的第一行突出显示 Error 标识符必须用端口模式声明 busy Code module main clk rst start busy ready cnt s
  • 具有 +1 逻辑的 4 位计数器 D 触发器

    我正在尝试通过 Verilog 实现带有 1 逻辑的 D 触发器计数器 但是我收到了很多有关网络多个常量驱动程序的错误代码 有人可以帮我吗 这是到目前为止的代码 module LAB clk clear Enable Q input clk
  • 如何在Verilog中将二维数组中的所有位设置为0?

    我构建了一个 8 2bits 数组来表示 Verilog 中的一块内存 reg 1 0 m 0 7 该存储器有一个复位信号 如果复位为1 则该存储器中的所有位都应重置为0 但是我不知道如何以简洁的方式设置m的所有位 因为如果有数百个内存中有
  • Verilog 中的大括号是什么意思?

    我很难理解 Verilog 中的以下语法 input 15 0 a 16 bit input output 31 0 result 32 bit output assign result 16 a 15 a 15 0 我知道assign语句
  • verilog 中的案例陈述

    我遇到了优先级编码器设计 并找到了一种使用 case 语句来实现它的新方法 唯一令人困惑的是 case语句是否优先考虑case 例子 case 1 b1 A 3 Y lt 4 b1000 A 2 Y lt 4 b0100 A 1 Y lt
  • Verilog 按位或 ("|") 单子

    我见过 Verilog 代码 其中使用了按位或运算符 目的是什么 例如 address 15 14 0 or address 15 14 io din ramrd 不能省略 吗在这些情况下 在这种情况下 它充当归约运算符 例如 4 b100
  • 如何匹配和删除队列中的元素?

    根据1800 2012 规格 http standards ieee org getieee 1800 download 1800 2012 pdf Queue delete input int index 删除 SystemVerilog

随机推荐

  • 请帮助我在我的 Java 应用程序中过滤掉 Apache Log4j 的第三方日志记录

    我正在使用第三方 jar 它们将自己的日志附加到我的 Java 应用程序的日志文件中 我不想将这些第三方日志附加到我的日志文件中 因为这会使日志文件非常笨拙和混乱 我知道这个方法 log4j logger org springframewo
  • JS 删除前导零

    在 JavaScript 中 我想删除小数位和后面的零 比如我原来的号码 0 00558 我想留下 558 这可能吗 如果有方法的话 我也在使用 AngularJS 您可以通过简单的正则表达式替换来做到这一点 var number 0 00
  • 矩阵取子集

    考虑以下矢量资源和矩阵团队 向量 res 代表索引 我需要只提取那些索引号在向量 res 中且性别 F 的名称 我需要在 R 中执行此操作 由于我是 R 的新手 无法解决此问题 res 1 2 12 16 5 6 19 17 14 9 4
  • 批处理文件 - 循环 ping - 输出到已启动的文件主机

    我想制作一个 bat 文件 它将执行如下所示的 for 循环 echo off FOR L G IN 1 1 69 DO ping n 1 192 168 G 3 ping n 1 192 168 G 4 然后查看输出并仅将成功回复 pin
  • Access 2007 交叉表查询表达式

    目标 根据计算列的值创建百分比列 下面是交叉表查询的 SQL 代码 TRANSFORM Count Master Calendar ID AS CountOfID SELECT Master Calendar Analyst Count M
  • 将上传图像的文件路径保存到 MySQL 数据库

    我为此浏览了无数不同的帮助菜单和主题 但仍然遇到问题 我只想将上传图像的文件路径插入 MySQL 数据库 我尝试将图像传递给变量 然后使用查询将其推送到数据库 但它不起作用 我的代码在下面 表单在上面 php在下面 h1 test h1
  • 如何修复“尝试用‘字符’索引 nil”(Roblox)

    输出显示 Players username PlayerGui replicated 18 attempt to index nil with Character 这是我的代码 local Character Player Characte
  • CSS高度100%问题

    我知道有很多关于 css 100 高度问题的问题 但是我尝试按照那里的说明进行操作 但高度仍然不是 100 所以我想我会再问这个问题 您可以看到问题的网站是 www exendo be 一些CSS样式 html height auto im
  • Ruby - Rails - 将文本传递给 javascript

    为什么这不将文本传递给 javascript jquery i error 里面肯定有一个字符串 我可以在控制台上打印它 js erb 文件 gt error Validation error s Item Is not defined o
  • Intellij checkstyle - 设置相对于模块的路径[重复]

    这个问题在这里已经有答案了 我的公司正在从 Eclipse 切换到 IntelliJ 在 Eclipse 中 我们对抑制过滤器进行了以下配置checkstyle xml
  • 如何使用 .querySelector 选择器定位 .style 属性?

    我通过以下方式选择了特定课程 querySelectorAll var hit3 document querySelectorAll lattern hit 3 circle 我现在正在尝试瞄准并调整 style visibility通过执
  • Dart 1.x 书籍仍然适用吗?

    既然 Dart 2 已发布 那么 Dart 1 x 书籍是否仍然相关 Dart 2 文档仅指向迁移指南 我正在尝试学习 Dart 想知道是否应该购买一本基于 Dart 1 x 的书籍 或者应该等待基于 Dart 2 的书籍的出版 Dart
  • 如何跨子图添加层次轴以标记组?

    我有一组可以分组的不同时间序列 例如 下图显示了 A B C 和 D 系列 但是 A 和 B 属于 G1 组 C 和 D 属于 G2 组 我想通过在左侧添加另一个轴来反映这一点 该轴穿过涡轮机组并相应地标记这些轴 到目前为止我已经尝试了一些
  • Eclipse WTP:项目中定义的类的 JSP 文件中出现“导入 ___ 无法解析”错误

    一位 Visual Studio 用户在 Eclipse 中苦苦挣扎 我将一组 servlet JSP 导入到 Oracle Workshop for Weblogic 中的一个项目中 page jsp 有以下导入语句 import com
  • SDN4 - Neo4j OGM + Jackson 2.0

    我尝试在 Spring Data Neo4j 4 0 0RC1 实体上使用 Jackson 2 x 注释 但在我的应用程序上下文启动中看到失败 我有两个 NodeEntities实现一个接口 我已经对接口进行了注释 JsonTypeInfo
  • KMLViewer Apple 的示例不起作用

    我一直在寻找问题的答案 但没有成功 所以就这样 KMLViewer Apple 的示例在某些情况下不起作用 执行自述文件步骤后 我尝试在葡萄牙里斯本和葡萄牙波尔图之间建立一条路线 最奇怪的事情发生了 注释已正确构建 尽管覆盖层 MKPoly
  • MVC Razor 中的 mailto 链接编码

    我有以下型号 public class EmailLinkModel public string mailbody get set public string emailSubject get set public string email
  • 如何在PowerDesigner中隐藏符号编号?

    在 Sybase PowerDesigner 中 当设计采用同一 XXXX 对象 即对象 的 2 个副本 实例的 UML 图时 应用程序会向该符号添加一个数字标识符 如 XXXX 2 可以去掉吗 提前致谢 这似乎不是直接可行的 但是 在 1
  • 与 .pull-right 一起使用时的 .img-responsive 中断

    我有一些图像 pull left and pull right将它们按照特定的模式对齐 我也在用 img responsive 图像如下所示 img src Images test modern jpg class pull right i
  • 使用数据流模型的T触发器

    我正在尝试模拟 t flipflop 的工作 timescale 1ns 1ps module t flipflop input t input clk input clear output q output qbar wire sbar