VHDL中单个位的加法

VHDL中单个位的加法,vhdl,vivado,Vhdl,Vivado,我一直在尝试编写一个添加单个位的组合电路。当我模拟我的代码时,我从我的临时寄存器中得到未知值(“U”)。我正在添加代码以供参考。如果我遗漏了什么或我的逻辑错误,请纠正我 IEEE库; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.NUMERIC_STD.ALL; 实体串行加法器是 端口(a:标准_逻辑中; b:标准逻辑; c:标准逻辑; d:在标准逻辑中; e:标准逻辑; f:在标准逻辑中; g:标准逻辑; h:在标准逻辑中; 求和:输出标准逻辑向量(3到0); 端串行加法

我一直在尝试编写一个添加单个位的组合电路。当我模拟我的代码时,我从我的临时寄存器中得到未知值(“U”)。我正在添加代码以供参考。如果我遗漏了什么或我的逻辑错误,请纠正我

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体串行加法器是
端口(a:标准_逻辑中;
b:标准逻辑;
c:标准逻辑;
d:在标准逻辑中;
e:标准逻辑;
f:在标准逻辑中;
g:标准逻辑;
h:在标准逻辑中;
求和:输出标准逻辑向量(3到0);
端串行加法器;
串行加法器的结构是
信号temp1、temp2、temp3、temp4:std_逻辑_向量(1到0);
信号temp5、temp6、temp9:std_逻辑_向量(2到0);
信号temp7、temp8:标准逻辑向量(1到0);
开始
过程(a、b、c、d、e、f、g、h)
开始

temp1(0)信号均为“U”,因为从未访问该进程

根据您的灵敏度列表,该过程仅对输入信号执行

process (a,b,c,d,e,f,g,h)
考虑到这一点,这些信号中没有一个在完成过程的值上发生变化


在您的测试台内,尝试更改其中一个信号的输入值,并且应在更改输出值的情况下执行该过程。

当您在该过程中不使用任何时钟时,不确定您试图通过该过程实现什么。通常(至少在我的经验中)你要么使用一个带时钟的进程(大多数情况下是一个重设if的情况),要么使用组合逻辑,这是你在进程之外做的

在FPGA中,当灵敏度列表中的信号发生变化时,仅“执行”/“分析”处理中的逻辑。另一方面,进程外的VHDL代码是用逻辑门实现的(即,没有时钟触发器,但有和/或/或/门等),因此不断地、几乎立即地更新。 如果您使用进程而忽略了灵敏度列表中的信号,或者在进程中使用奇怪的VHDL代码,不允许使用FPGA逻辑进行适当的合成(即,在您的示例中没有时钟的进程),那么它可能在模拟器中工作,但在FPGA中不工作

话虽如此,我建议您将问题转化为一个计时过程:

串行加法器的结构是 --定义信号。。。 开始 过程(clk) 开始 如果上升沿(clk),则 如果重置='1',则 --将信号重置为其默认水平:
temp1(0)你的模拟是做什么的?我得到了U作为结果,所有的temp信号都显示值U。我已经添加了模拟的图像。信号在进程暂停之前不会更新。如果需要在赋值后立即更新的数据对象,则需要一个变量。但进程外的变量应该共享,对吗?您只有一个进程,没有其他并发语句。外面是什么?注意:虽然在您的流程中评估了temp1、temp2、temp3、temp4、temp5、temp6、temp7、temp8和temp9,但它们都不在流程敏感性列表中。添加这些不会有帮助,你也有。我更改了敏感度列表。我在列表中添加了所有的温度信号,计算完总和后,我将其分配给进程块之外的总和。但是,它仍然显示出一些问题problem@user15725054“一些问题”是什么意思?请编辑您的问题(问题下方有一个小链接),添加更改的来源,并显示确切的问题。或者,如果与问题无关,请发布新问题。使用
处理(全部)
并针对VHDL-2008进行模拟/编译。自2008年以来,VHDL中的灵敏度列表已被弃用。IEEE Std 1076-2008 11.3过程声明“如果使用保留字all指定进程敏感度列表,则wait语句的敏感度列表是通过应用以下规则,从进程中的每个语句构造的集合的并集来构造的…”。。。“完全没有弃用,可能有合理的理由手动指定敏感度列表。每个进程至少执行一次,使该答案无效。敏感度列表意味着等待语句是带有敏感度子句的最后一个语句(10.2等待语句)。抱歉,我不得不写一个答案,我没有足够的声誉来评论别人的帖子。。。你能发布你的意思的图片吗?