VHDL门控时钟如何避免

2024-01-04

我收到了避免使用门控时钟的建议,因为它可能会导致松弛和时序限制问题。但我想问一下我可以认为什么是门控时钟。 例如:

此代码对时钟进行门控,因为 StopCount 对它进行门控。

process(ModuleCLK)
begin
    if (rising_edge(ModuleCLK) and StopCount = '0') then
       if ModuleEN = '0' then
           RESET <= '0';
           POWER <= '1';
           EN <= '0';
           CLOCK <= '0';
           SERIAL <= '0';
       elsif

这段代码也门控时钟?

    process(ModuleCLK)
    begin
        if ModuleEN = '0' then
               RESET <= '0';
               POWER <= '1';
               EN <= '0';
               CLOCK <= '0';
               SERIAL <= '0';
        elsif (rising_edge(ModuleCLK)) then

术语“门控时钟”通常在 ASIC 技术中用于表示仅当条件为真 (1) 时才生成时钟脉冲的时钟,因此门控时钟是时钟源的属性。门控时钟可以用锁存器和与门制成,如下所示,这种设计需要特别注意解决您提到的时序问题,因此不适合FPGA设计:

您显示的代码使用触发器上的使能来根据使能更新触发器值,因此这是时钟使能,而不是门控时钟。

第一个代码可以而且应该写成:

process (ModuleCLK) is
begin
    if rising_edge(ModuleCLK) then
        if StopCount = '0' then
            ...  -- Update at clock if StopCount = '0'

这反映了设计在 FPGA 中的典型实现方式,其中触发器始终提供时钟(ModuleCLK) 但只有在条件 (StopCount = '0') 是真的。

第二个代码示例看起来像异步重置,只是代码应该具有重置条件(ModuleEN)在敏感度列表中(问题代码中缺失)。由于触发器不需要时钟来改变值,所以发生异步复位;唯一的要求是复位条件为真,然后值的变化与任何时钟异步发生。

因此,在 VHDL 中正确编写触发器的方法是,输入a和输出z, 就好像:

process (reset, clock) is
begin
  if reset = '1' then
    z <= '0';
  elsif rising_edge(clock) then
    if enable = '1' then
      z <= a;
    end if;
  end if;
end process;

在 Altera Quartus II 中,这会创建如下 RTL 图形:

Arria II 器件中的实现如下:

这表明向上触发器实际上是在时钟的每个上升沿更新的,因此时钟使能是通过组合设计(LUT)实现的,其中当使能为假(0 ),或者新数据来自a当启用为真时 (1)。

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

VHDL门控时钟如何避免 的相关文章

  • Linux驱动程序DMA传输到PC作为主机的PCIe卡

    我正在开发一个 DMA 例程 将数据从 PC 传输到 PCIe 卡上的 FPGA 我阅读了 DMA API txt 和 LDD3 ch 15 详细信息 但是 我不知道如何从 PC 到 PCIe 卡上的一致 iomem 块进行 DMA 传输
  • 错误(10028):无法解析网络的多个常量驱动程序... VHDL 错误

    我正在尝试编写一个代码来检测 din 信号的上升沿 并在发生后将 doout 提高 5 个时钟周期 我在编译时不断收到不同的错误 但我不确定它们的含义 我认为我对 VHDL 中的一些概念缺乏基本的了解 但遗憾的是在网上查找并没有给我带来太大
  • Lex VHDL '(勾号)令牌

    在 VHDL 中 字符可用于封装字符标记ie 或者它可以作为属性分隔符 类似于 CPP 的 token ie string hello 解析包含字符的属性名称时出现问题ie string a b c 在这种情况下 天真的词法分析器将错误地标
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • 将库添加到 Vivado 2014.4

    我对 Vivado 和 VHDL 还很陌生 我想要一些关于基本问题的指导 我猜我可以创建自己的库并在我的项目中使用它们 就像使用默认库和基本库一样 eg library IEEE use IEEE std logic 1164 ALL us
  • VHDL - 分配默认值

    我有以下架构 architecture datapath of DE2 TOP is begin U1 entity work lab1 port map error on this line clock gt clock 50 key g
  • FPGA 有哪些实际应用?

    我对我的程序为一个小型七段显示器提供动力感到非常兴奋 但是当我向不在现场的人展示它时 他们总是说 那么你能用它做什么 我永远无法给他们一个简洁的答案 谁能帮我吗 第一 它们不需要具有易失性存储器 事实上 大厂商 Xilinx Altera
  • 赋值语句中的“others=>'0'”是什么意思?

    cmd register process rst n clk begin if rst n 0 then cmd r lt others gt 0 elsif clk event and clk 1 then cmd r lt end if
  • 在VHDL中将8位二进制数转换为BCD

    该算法众所周知 您进行 8 次左移 并在每次移位后检查个位 数十位或数百位 每个 4 位 如果它们超过 4 个 则将 3 个添加到该组中 依此类推 这是一个基于流程的解决方案 但不起作用 它会编译 但输出不是我想要的 有什么想法可能是什么问
  • 从 OpenCV 代码到 FPGA 代码的转换是否比 Matlab 代码更容易? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想做一个关于图像处理的项目 我想知道如果我想在FPGA上实现这个项目 我应该在第一阶段选择Matla
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • VHDL - 为什么直接在函数上使用长度属性会产生警告?

    我有一个 VHDL 函数 它返回记录的 std logic vector 表示形式 并且我想要该 std logic vector 的长度 我可以直接在函数上使用长度属性 为什么这会在 ModelSim 中产生警告 我是否会引发一些微妙的问
  • getmtime() 与 datetime.now():

    此代码每年在时钟转换的晚上打印一次错误警告 中欧夏令时间到中欧时间 import os import datetime now datetime datetime now age now datetime datetime fromtime
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • OSX 上的单调时钟

    CLOCK MONOTONIC似乎不可用 所以clock gettime已经出局了 我在一些地方读到 mach absolute time 可能是正确的方法 但在读到它是一个 cpu 相关值 后 它立即让我想知道它是否在下面使用 rtdsc
  • VHDL 中的 #define 等价物是什么

    VHDL 中的 define ifdef 和 ifndef 相当于什么 我想使用泛型作为 define 并根据它们更改设计 举一个简单的例子 定义一个字符串泛型并用它来确定时钟是单时钟还是差分时钟 generic something boo
  • 如何在 AngularJS 和 HTML 中制作滴答作响的时钟(时间)

    我是一名 AngularJS html 初学者用户 一直在尝试寻找代码片段来为网络应用程序制作时钟 时间项目 网络搜索并没有像我期望的那样容易地提供直接的结果 所以我想我应该发布这个问题来获得一些答案 也让其他人更容易找到这个问题 我已经发
  • FPGA 系统中的同步与异步复位

    我刚开始使用各种不同的模块创建 FPGA 系统来驱动 I2C 总线 尽管我认为这个问题适用于任何 FPGA 系统 并且所有模块都使用同步复位 这些模块使用时钟分频器模块进行计时 该模块获取系统时钟并向系统的其余部分输出较低的频率 我遇到的问
  • VHDL FSM多驱动网Q连接到常量驱动程序,其他驱动程序被忽略,我的代码有什么问题?

    这段代码是一个 FSM 它是一个摩尔机 艾莉莎 P 哈克 Alyssa P Hacker 有一只蜗牛 沿着纸带爬下去 上面有 1 和 0 蜗牛 每当最后两个时都会微笑 它爬过的数字是 01 设计摩尔和米利 蜗牛大脑的 FSM 代码如下所示
  • 用几个 1 位 ALU 制作一个 4 位 ALU

    我正在尝试将几个 1 位 ALU 组合成一个 4 位 ALU 我对如何在 VHDL 中实际执行此操作感到困惑 这是我正在使用的 1 位 ALU 的代码 component alu1 define the 1 bit alu componen

随机推荐

  • 为什么atomic_flag默认构造函数未指定状态?

    使用时std atomic flag http en cppreference com w cpp atomic atomic flag 必须小心地始终使用显式初始化它ATOMIC FLAG INIT http en cppreferenc
  • 处理缓存动态数据

    我正在使用名为 Quickcache for PHP 的东西 它提供网页的全页缓存 它工作得很好 但我唯一的问题是我有一个动态网站 并且当缓存打开时 某些内容不会按照我想要的方式更新 例如 如果用户登录 即使用户登录到服务器 登录框仍然会出
  • PHP表格(日期)根据有效性动态变色

    div class table responsive table class table table striped table bordered thead th Client Contract Number th th Currentl
  • Delphi 11 中“SSL 协商失败”

    我尝试使用下面的代码发送电子邮件 取自http delphiprogrammingdiary blogspot com 2014 12 how to send email in delphi html http delphiprogramm
  • 从更大的 JSON 字符串中检索所需的字符串

    我有方法返回的 JSON 字符串 public List
  • protobuf-net 如何实现可观的性能?

    我想明白为什么 NET 的协议缓冲区解决方案 http code google com p protobuf net 由开发马克 格拉维尔 https stackoverflow com users 23354 marc gravell就这
  • 如何访问字典列表中的值?

    假设我有一个包含姓名 年龄和其他信息的字典列表 如下所示 thisismylist Name Albert Age 16 Name Suzy Age 17 Name Johnny Age 13 我将如何使用 for 循环打印以下内容 Alb
  • 使用 swift 语言更改按钮背景颜色

    我是 swift 语言的新手 有人可以告诉我如何使用 swift 语言更改按钮的背景颜色吗 button backgroundColor UIColor blue 或任何其他颜色 red green yellow etc 另一个选项是 RG
  • 当我的代码不在堆栈跟踪中时,如何调试 node.js 错误?

    事实上 我并不完全理解why如果节点是单线程的 我的代码不在堆栈跟踪中 也许我从根本上误解了一些东西 但是为什么我的应用程序有时会因堆栈跟踪而终止 而堆栈跟踪中没有我编写的任何内容 我正在使用 node express 编写一个非常简单的代
  • 在使用 MVP 模式构建的 ASP.NET Web 表单应用程序上应用依赖注入

    我正在使用 MVP 模式创建 ASP NET Web 表单应用程序 我的观点的结构是这样的 public partial class ShipperView System Web UI Page IShipperView ShipperPr
  • 使用 Dapper.NET 从存储过程调用获取 Oracle OUT 参数的值

    编辑 使用Execute方法而不是Query QueryMultiple方法 我的OUT SUCCESS参数现在有一个AttachedParam与 与 与OracleParameter有返回值 因此 例如 如果我仅需要检索非游标参数 那么这
  • 打包使用 ImageMagick C API 的应用程序

    我创建了一个使用 ImageMagick C API 的小型 Windows 应用程序 但遇到了一些困难 该应用程序运行良好 我已准备好与我们组织中的其他一些人共享它 但如果不在目标计算机上安装 ImageMagick 我找不到有关分发此类
  • 北欧航空公司。变量是否在数据步骤的每次迭代中都设置为缺失?

    我一直认为数据步骤的每次迭代都将变量设置为缺失 然而 在下面的代码中 变量看起来像是保留了最开始获取的值 我不明白为什么会发生这种情况 data one input x y datalines a 10 a 13 a 14 b 9 run
  • Apache Camel超时同步路由

    我正在 trwing 使用 Apache Camel 构造一个带有超时的同步路由 但我在框架中找不到任何可以解析它的内容 所以我决定建立一个为我制作的流程 public class TimeOutProcessor implements P
  • 为什么 Visual Studio 2019 社区中我的 SSIS 工具箱为空?

    我安装了 Visual Studio 2019 Community 然后安装了数据工具 我可以打开 Integration Services 项目 但当我查看 SSIS 工具箱时 它是空的 我该如何解决 我使用的是 Visual Studi
  • 无法加载 DLL“mqrt.dll”

    我开发了一个 WCF 服务 它作为 Windows 服务托管并公开 MSMQ 端点 我在 SERVER1 上有客户端应用程序 在 SERVER2 上有 MSMQ 和 WCF 服务 当 SERVER1 ClientApp 尝试将消息推送到 S
  • 数据准备好后如何关闭Loader

    In my Ionic 2app 中 我有一个使用服务的组件 该服务使用 http GET 来获取一些数据 然后 我的组件调用该服务 当数据可用时 它会设置并呈现该数据 看起来像以下 export class FarmList implem
  • 在 Access 中导入 Excel 数据

    我的 Access 应用程序中有一个表 需要填充一堆 Excel 文件中的数据 我尝试了这段代码 DoCmd TransferSpreadsheet acImport acSpreadsheetTypeExcel8 strTable str
  • 使用 BouncyCastle 在 C# 中读取 DER 私钥

    我正在尝试使用 BouncyCastle 将 RSA 私钥读入 Net 来测试我之前加密的数据 加密数据使用公钥和 Bouncy Castle 工作正常 我还使用了与下面相同的私钥 DER 格式 在 PHP 应用程序中成功解密我的数据 但我
  • VHDL门控时钟如何避免

    我收到了避免使用门控时钟的建议 因为它可能会导致松弛和时序限制问题 但我想问一下我可以认为什么是门控时钟 例如 此代码对时钟进行门控 因为 StopCount 对它进行门控 process ModuleCLK begin if rising