全8位加法器,非逻辑输出

2024-02-15

我创建了一个带全加器的 8 位加法器。 正如您所看到的,我开始从右到左添加相应的位,对于 cin 信号 t1 和 t2,并按顺序 cout t2 和 t1。第一个 cin 设置为加法器输入 cin。 我在实现中没有看到任何问题,但是当我运行它时,我得到 o 输出信号的红线。有人可以告诉我出了什么问题吗?(我已经测试了全加器并返回了正确的结果。)

谢谢。

这是代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity adder8bit is
    Port ( a : in  STD_LOGIC_VECTOR (7 downto 0);
           b : in  STD_LOGIC_VECTOR (7 downto 0);
           cin : in  STD_LOGIC;
           o : out  STD_LOGIC_VECTOR (7 downto 0);
           cout : out  STD_LOGIC);
end adder8bit;

architecture Behavioral of adder8bit is

component fulladder is
    Port ( a : in  STD_LOGIC;
           b : in  STD_LOGIC;
           cin : in  STD_LOGIC;
           o : out  STD_LOGIC;
           cout : out  STD_LOGIC);
end component;

signal t1,t2:std_logic:='0';

begin

C1: fulladder port map( a => a(0), b => b(0), cin => cin, o => o(0), cout => t1 );
C2: fulladder port map( a => a(1), b => b(1), cin => t1, o => o(1), cout => t2 );
C3: fulladder port map( a => a(2), b => b(2), cin => t2, o => o(2), cout => t1 );
C4: fulladder port map( a => a(3), b => b(3), cin => t1, o => o(3), cout => t2 );
C5: fulladder port map( a => a(4), b => b(4), cin => t2, o => o(4), cout => t1 );
C6: fulladder port map( a => a(5), b => b(5), cin => t1, o => o(5), cout => t2 );
C7: fulladder port map( a => a(6), b => b(6), cin => t2, o => o(6), cout => t1 );
C8: fulladder port map( a => a(7), b => b(7), cin => t1, o => o(7), cout => cout );

end Behavioral;

在我看来,您假设您的实例C1 ... C8是按顺序执行的,因此您可以交替使用两个信号t1 and t2就好像这是一个可以重用变量的程序。

然而,您正在创建一个具有连接的结构,并且t1对于您正在使用它的所有 8 个实例来说,信号将是相同的。因此你有 4 个驱动程序C1, C3, C5 and C7 for t1(同样对于t2)并且该代码很可能不可合成。

您可以做的是在设置中使用 8 个进位信号,如下所示:

signal c: std_logic_vector(7 downto 1) := (others => '0');
-- ...
C1: fulladder port map( a => a(0), b => b(0), cin => cin, o => o(0), cout => c(1) );
C2: fulladder port map( a => a(1), b => b(1), cin => c(1), o => o(1), cout => c(2) );
C3: fulladder port map( a => a(2), b => b(2), cin => c(2), o => o(2), cout => c(3) );
-- ...
C8: fulladder port map( a => a(7), b => b(7), cin => c(7), o => o(7), cout => cout );

此外你可以看看四生成循环 http://www.ics.uci.edu/~jmoorkan/vhdlref/generate.html以减少代码中的重复量。如果您扩展进位向量以包括cin and cout,所有 8 条线看起来都一样(索引递增除外)。

signal c: std_logic_vector(8 downto 0) := (others => '0');
-- ...
c(0) <= cin;
cout <= c(8);
-- ...
-- your for-generate loop here...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全8位加法器,非逻辑输出 的相关文章

  • FPGA:三种基本门电路设计(与门、或门、非门)

    FPGA的设计跟数电是紧密相连的 而我们学习数电时候 学习的第一个内容就是数字逻辑基础 这里面就包含了我们今天要讲解的三种基本的门电路 这里 我们依次讲解过来 1 与门 定义 有两个或多个输入 但只有一个输出 只有在所有输入都是高但电平时才
  • 子状态机

    我有一个有 5 个州的 FSM 其中3个是通过子FSM UML模式 设计的 对于 VHDL 中的实现 恕我直言 有两种方法可以做到这一点 将它们总结为一个 这样我就有了一份包含子 FSM 的文档和一个包含一个大 FSM 的产品 与所有州建立
  • 在 vhdl 中计算(并验证)以太网 FCS (crc32)

    我正在使用Spartan 3E 入门套件我正在尝试通过 100MBit 链路接收以太网帧 对于那些不知道的人 该板具有 PHY 芯片 暴露了 25MHz 的接收时钟 我 几乎 已经通过缓冲接收到的帧并通过串行链路重新发送它们来验证接收工作正
  • VHDL:正式端口“portName”没有实际值或默认值

    我在实例化 VHDL 模块 PWM 的 VHDL 测试平台上收到编译错误 正式端口 Duty Cycle 没有实际或默认值 当站在 dev to test PWM 代码行时会看到该错误 在实例化的 PWM 模块中 Duty Cycle st
  • 二进制补码 VHDL

    我只是想用 VHDL 制作一个简单的二进制补码设备 但它抛出了这个非常烦人的错误 我不确定我做错了什么 可能是一些非常愚蠢的事情 错误是 错误 10327 twocompliment vhd 21 处的 VHDL 错误 无法确定运算符 na
  • VHDL——连接开关和LED

    我有 Xilinx Spartan6 和下一个 VHDL 代码 library ieee use ieee std logic 1164 all use ieee numeric std all entity Switches Leds i
  • VHDL:IEEE std_logic 库中的真值表

    我研究了 IEEE 如何定义其库 当我打开的时候标准逻辑库 我看到了一些被定义为常数的真值表 我不知道真值表是如何运作的 请解释如何使用真值表返回结果 这是我找到的 AND 门 TYPE stdlogic table IS ARRAY st
  • 我需要多少个进程来监视两个信号?

    我是一名 vhdl 初学者 需要帮助解决我的问题 我有两个需要监控的信号 一个是 CHECK 另一个是 OK 每次我要求检查时 我都应该得到好的结果 高或低 我需要连续监测6个连续的CHECK脉冲 并计数OK 如果我有 6 OK 低 那么我
  • 如何在 Sphinx 运行时预处理源文件?

    我已经为我的项目设置了 Sphinx 文档 并希望提取源文件的文档字符串并将它们嵌入到最终文档中 不幸的是 Sphinx 不支持源文件的语言 VHDL VHDL 似乎没有 Sphinx 域 所以我的想法如下 挂钩 Sphinx 运行并在 S
  • 在非时钟信号上使用上升沿是不好的做法吗?还有其他选择吗?

    我正在研究 VHDL 设计并且它可以工作 但是代码非常丑陋 而且我似乎正在尝试围绕语言的设计来实现我的目标 这一事实让我觉得有些事情是错误的 我对 VHDL 还很陌生 但我已经研究该项目的较小部分近一个月了 所以我有了总体想法 然而 这部分
  • VHDL - PhysDesignRules:367

    当我尝试从 VHDL 代码合成 实现和生成程序文件时 我收到警告 当我尝试合成时出现此错误 WARNING Xst 647 Input
  • VHDL门控时钟如何避免

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

    我在做类似的事情时遇到困难 b 0 to 7 lt a 7 downto 0 当我用ghdl编译它时 出现顺序错误 我发现使我的电路工作的唯一方法如下 library ieee use ieee std logic 1164 all ent
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • VHDL - iSIM 输出未初始化,不改变状态

    您好 我是一位 Xilinx 新用户 在如何在测试台中编写激励 模拟方面遇到了麻烦 我的输出 Kd 没有给我任何合理的值 并在移动并始终保持在 1 之前的前几个时钟周期给出 u 不确定我是否写了正确的刺激 但希望有人能帮助我 我的VHDL代
  • ACTIV HDL - VHDL -“信号无法合成,同步描述错误”

    我在 Xilinx 中综合此代码时遇到错误 这个错误是 信号 Z 1 无法合成 同步描述错误 entity uk3 is port rst in BIT C in INTEGER clk in BIT S out INTEGER end u
  • 将 n 位的 std_logic_vector 向右或向左移位

    我有一个向量signal tmp std logic vector 15 downto 0 我必须将它向左或向右移动 n 位 我怎样才能实现这个操作 我想到了串联操作 但我不知道如何使用它 Use the ieee numeric std库
  • VHDL - FSM 未启动(仅在时序仿真中)

    我正在写我的硕士论文 而且我对 VHDL 还很陌生 但我仍然必须实现一些复杂的东西 这是我必须编写的最简单的结构之一 但我仍然遇到了一些问题 它是一个 FSM 采用低电平有效同步信号 用于对 DAC 进行编程 实现 24 位移位寄存器 这只
  • VHDL - 为什么直接在函数上使用长度属性会产生警告?

    我有一个 VHDL 函数 它返回记录的 std logic vector 表示形式 并且我想要该 std logic vector 的长度 我可以直接在函数上使用长度属性 为什么这会在 ModelSim 中产生警告 我是否会引发一些微妙的问
  • Simulink/HDL Coder 中的反馈循环

    我有一个 Simulink HDL 编码器系统 请参见下图 我有 3 个输出和 3 个输入 我希望我的系统运行 10 次 每次迭代后 它应该选择输出并将它们用作输入 我怎样才能做到这一点 使用存储器和每个信号的初始值块构建一个循环 内存块允

随机推荐