VHDL 中的 #define 等价物是什么

2024-04-13

VHDL 中的#define、#ifdef 和#ifndef 相当于什么?

我想使用泛型作为#define,并根据它们更改设计。举一个简单的例子:定义一个字符串泛型并用它来确定时钟是单时钟还是差分时钟。

generic (
  something : boolean := FALSE;
  CLK_MODE : string := "SINGLE_ENDED"
);

现在,如何根据泛型改变逻辑?当然,我们可以用一个简单的 if 语句编写 2 个可能的逻辑描述,但随后两者都会被合成(尽管实际上只使用了一个)。

另外,是否可以根据通用更改端口?对于 CLK 示例,差分时钟需要 2 个输入端口,但单端时钟只需要 1 个端口。如何根据通用启用或禁用第二个端口?


根据条件合成不同硬件电路的一种方法是使用genericif-generate陈述。在下面的例子中,当泛型ARITHMETIC_OPERATION_IS_ADD为 true,则生成加法器。当它为假时,生成减法器。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity conditional_hardware is
    generic (
        ARITHMETIC_OPERATION_IS_ADD: boolean := true
    );
    port (
        a, b: in unsigned(7 downto 0);
        y: out unsigned(7 downto 0)
    );
end;

architecture example of conditional_hardware is
begin

    adder: if ARITHMETIC_OPERATION_IS_ADD generate
        y <= a + b;
    end generate;

    subtractor: if not ARITHMETIC_OPERATION_IS_ADD generate
        y <= a - b;
    end generate;

end;

注意:如果您确实需要,可以使用 VHDL 预处理器,它们的工作方式与 C++ 对应的预处理器非常相似。例如,看一下http://vhdlpp.sourceforge.net/README http://vhdlpp.sourceforge.net/README.

对于可重用 VHDL 基础知识的非常全面的介绍,我强烈推荐 VLSI Technology 的白皮书.

自从我上次使用 LVDS 以来已经有一段时间了,所以以下内容可能已经过时了。对于输出,您可以为两个输出引脚分配互补值:

diff_out_p <= my_signal;
diff_out_n <= not my_signal;

然后,在项目设置文件中,将它们分配给差分对,并将输出标准设置为 LVDS 或您使用的任何标准。

对于输入,我的工具手册建议实例化一个原语。该原语有两个输入和一个输出。您应该将输入连接到差分对,并在 VHDL 代码中使用输出(<data_out>在下面的例子中)。

library altera; 
use altera.altera_primitives_components.all; 

lvds_input_buffer : ALT_INBUF_DIFF
generic map (
    IO_STANDARD => "LVDS",
    LOCATION => "IOBANK_1A",
    ENABLE_BUS_HOLD => "off",
    WEAK_PULL_UP_RESISTOR => "off"
)  port map ( 
    i => <data_in_pos>,
    ibar => <data_in_neg>,
    o => <data_out>
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VHDL 中的 #define 等价物是什么 的相关文章

随机推荐

  • 如何在flutter中显示scrollController的滚动索引?

    我想通过利用滚动控制器在 listView 底部显示索引 与下图中显示的方式相同 用户向下滚动或向上滚动后 左侧以红色突出显示的计数会根据用户的滚动方向增加 减少 我想要实现的是自动更新显示项目的索引 如图中红色所示 因此 每当用户向下或向
  • 如何减少地理地图的地块与边界之间的空间?

    我正在尝试使用 marmap 库绘制美国东北部的测深地图 以下代码加载了正确的范围 但是当我绘制地图时 边界和地图之间有空白区域 无论是在地图的顶部 底部还是左侧 右侧 导出绘图时也会出现这种情况 如果我拖动绘图查看器屏幕大小 绘图会进行调
  • 我可以使用 FileChannel 独立地从不同线程查找文件吗?

    我创建了一个可处理 FLV 文件的 Web 应用程序 该应用程序使用我创建的一个库来解析 flv 文件的内容 该库使用 FileChannel 来查找文件 现在 我从不同的线程中寻找相同的 flv 文件 因此遇到了一种奇怪的行为 这么说吧T
  • 如何获取 WooCommerce 中的活跃订阅者列表?

    我正在尝试获取所有具有活跃订阅的用户的列表 但在我的一生中似乎无法让某些东西发挥作用 如果我查看仪表板中的用户 我会看到所有活跃成员都具有 Abonn 角色 所以我设置了这样的短代码 function custom get members
  • 致命错误:在第 6 行对 C:\wamp\www\ci\application\models\site_model.php 中的非对象调用成员函数 get()

    你好 我刚刚观看了 Nettuts 上的第一个 第一天的截屏视频 CodeIgniter from scrap 我已经遇到了一个我不明白的错误 这是一个屏幕截图http i39 tinypic com 14mtc0n jpg http i3
  • Google 日历 PHP API 不发送邀请电子邮件

    我已使用 PHP 和服务帐户成功与 Google 日历集成 我可以做什么 更新日历事件 将与会者添加到日历活动 我不能做什么 添加新与会者时发送邀请电子邮件 这是迄今为止我用来完成所有事情的完整代码 putenv GOOGLE APPLIC
  • Django 多个数据库 - 一个并不总是可用

    我正在开发一个 Django 应用程序 它将使用多个数据库后端 我想在运行 django 应用程序的机器上放置一个 sqlite 数据库 并同步到远程 mysql 数据库 棘手的部分是 运行应用程序的机器并不总是有互联网连接 因此 mysq
  • 根据用户选择的选项设置单选按钮的值

    根据用户对三个下拉列表的选择 我想从下面的对象中设置给定单选按钮的值 例如 如果我从第一个选择标签中选择 Drop Down 1 1 并将其他两个留空 则 radio button 4 的值不会为 r 5000 R 如果我选择 下拉 1 1
  • 使用嵌套字典Python的自定义类

    当使用相同的键在嵌套字典中添加值时遇到问题 并且该值始终显示相同的值 事实是 我想更新值事件 键是相同的 该算法是人工鱼群算法的基础 example gt gt fish template 0 weight 3 1 visual 2 ste
  • Boost read_json 和 C++11

    我正在尝试使用 Boost 的 property tree 解析器和 C 11 代码解析 JSON 我的系统是带有 gcc 4 7 2 和 Boost 1 49 的 Debian Wheezy 我尝试了以下代码基于使用 boost 序列化和
  • 数组映射返回未定义的数组,何时应返回对象数组

    为什么 a b c map x gt letter x 返回一个未定义的数组 and a b c map x gt letter x 0 正确返回对象数组 Because 您可以使用大括号作为块语句 https developer mozi
  • 在数据框中创建一个新列:组中的索引(组之间不唯一)

    我有一个包含两列的数据框 第一列包含每个人所属的组 第二列包含个人的 ID 见下文 df lt data frame group c G1 G1 G1 G1 G2 G2 G2 G2 indiv c indiv1 indiv1 indiv2
  • android 如何监听自定义变量?

    我看过这个线程 如何实现监听器 https stackoverflow com questions 5941960 android how to implement listener关于实现侦听器 它实际上非常简单 但我不知道它到底是如何完
  • 检索并使用 Microsoft 或 Mozilla 的 Root-CA 列表并在 Java 中使用它?

    OpenJDK for Windows 中包含的根 CA 证书列表非常令人印象深刻 但有很多根 CA 证书受到 Firefox 等常见浏览器的信任 但不受 Java 信任 Both 微软 https support microsoft co
  • ASP.NET MVC3 和服务器端验证

    假设用户禁用了 javascript 因此客户端验证在 MVC3 中不起作用 实现服务器端验证的最佳方法是什么 以便当用户尝试以不适当的方式处理数据时仍然显示验证消息 Thanks EDIT 显然发生这种情况是因为我使用 EF 生成的模型
  • jquery fancybox 触发点击仅工作一次

    我从绑定到表行的单击事件调用 jquery fancybox 链接 该操作第一次工作正常 但是 如果我关闭 fancybox 并再次单击任何行 绑定到该行的匿名函数仍然会触发 但 fancybox 不会启动 这是我正在使用的 JavaScr
  • 在 CruiseControl.NET 构建中使用“devenv”和“msbuild”有什么区别?

    CruiseControl NET 中使用 标记和 标记的主要区别是什么 我知道它们调用不同的可执行文件 但有时我会得到不同的结果 就编译时的通过 失败而言 我想知道为什么两个构建命令之间存在差异 基本上 devenv Visual Stu
  • hashbang 行上的 Eclipse javascript 语法错误

    当我将一些现有的 Node js 代码导入 Eclipse 工作区时 它会抱怨 令牌 无效字符 出现语法错误 请删除此令牌 on the usr bin env node哈希邦线 我怎样才能告诉 Eclipse 忽略这个错误 对于 Node
  • Android - 如何更新通知号码

    您好 我想在单个视图中显示所有通知 并且想要更新状态栏中的通知数量 它更新所有信息 但显示数量始终为 1 请告诉我如何解决它 Override public void onReceive Context context Intent int
  • VHDL 中的 #define 等价物是什么

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