Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VHDL中求标准逻辑向量和?_Vhdl_Add - Fatal编程技术网

如何在VHDL中求标准逻辑向量和?

如何在VHDL中求标准逻辑向量和?,vhdl,add,Vhdl,Add,我试图求8个ADC的样本值之和。将它们除以8,然后通过DAC返回结果。我已经做了一个case语句,它让用户在对整个通道求和或只输出一个通道之间进行选择。 我遇到的问题是,结果是“闪烁”。它经常做它必须做的事情,但有时它给出了看起来更高的值。 此外,单个通道似乎比总和差得多。我感觉它综合了两种不同的东西,一种是求和,另一种是单独的通道。 我想这可能与我如何求向量和有关,但我没有足够的经验来判断我所做的是否是错的。 有人知道我做错了什么吗 守则: IEEE库; 使用IEEE.STD_LOGIC_1

我试图求8个ADC的样本值之和。将它们除以8,然后通过DAC返回结果。我已经做了一个case语句,它让用户在对整个通道求和或只输出一个通道之间进行选择。 我遇到的问题是,结果是“闪烁”。它经常做它必须做的事情,但有时它给出了看起来更高的值。 此外,单个通道似乎比总和差得多。我感觉它综合了两种不同的东西,一种是求和,另一种是单独的通道。 我想这可能与我如何求向量和有关,但我没有足够的经验来判断我所做的是否是错的。 有人知道我做错了什么吗

守则:

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.STD_LOGIC_UNSIGNED.ALL;
实体金额为
港口(
时钟输入:标准逻辑中;--200MHz
复位:在标准逻辑中;
SUM_EN:标准逻辑中;
和有效:在标准逻辑中;
信道_在_1中:在标准_逻辑_向量中(7到0):=(其他=>'0');
信道_在_2中:在标准_逻辑_向量中(7到0):=(其他=>'0');
信道_在_3中:在标准_逻辑_向量中(7到0):=(其他=>'0');
信道_IN_4:IN标准逻辑_向量(7到0):=(其他=>'0');
信道_在_5中:在标准_逻辑_向量中(7到0):=(其他=>'0');
信道_在_6中:在标准_逻辑_向量中(7到0):=(其他=>'0');
通道_在_7中:在标准_逻辑_向量中(7到0):=(其他=>'0');
信道_在_8中:在标准_逻辑_向量中(7到0):=(其他=>'0');
模式数据:标准逻辑向量(3到0);
数据输出:输出标准逻辑向量(7到0):=x“80”;
SUM_READY:OUT标准_逻辑:='0');
最终金额;
sum的体系结构行为是
--输入输出寄存器
信号r_和en:STD_逻辑:='0';
信号r_和en_边缘:标准逻辑:='0';
信号r_和有效:标准逻辑:='0';
信号r_和_就绪:标准逻辑:='0';
信号r_通道_在_1:STD_逻辑_向量(7到0):=(其他=>'0');
信号r_通道_在_2中:标准逻辑_向量(7到0):=(其他=>'0');
_3中的信号r_通道_:STD_逻辑_向量(7到0):=(其他=>'0');
信号r_通道_in_4:STD_逻辑_向量(7到0):=(其他=>'0');
信号r_通道_在_5:STD_逻辑_向量(7到0):=(其他=>'0');
信号r_信道_in_6:STD_逻辑_向量(7到0):=(其他=>'0');
信号r_通道_in_7:STD_逻辑_向量(7向下至0):=(其他=>'0');
信号r_信道_在_8:STD_逻辑_向量(7到0):=(其他=>'0');
信号r_模式_数据:标准逻辑_向量(3到0):=(其他=>'0');
信号r_数据输出:标准逻辑向量(7到0):=x“80”;
--逻辑信号
机器类型为(空闲、初始化、求和、等待、平均、交付);
信号状态:机器;
开始
r_通道_in_1'0');
保持通道7:=(其他=>“0”);
保持_通道_8:=(其他=>“0”);
ELSIF上升沿(时钟输入)则
案例状态为
空闲时=>
r_和_en_边缘平均值:=保持信道_6;
当x“7”=>平均值:=保持信道7;
当x“8”=>平均值:=保持信道8;
当其他=>null时;
终例;

你能提供一个显示不良行为的模拟吗?不幸的是,模拟中没有显示问题。只有当它下载到FPGA时。我有很多这样的例子,在模拟中一切都很好,但在现实生活中它不起作用……如果电路行为与模拟不同,问题要么是模拟刺激,要么是其他地方的问题。来自合成的警告?接口定时?控制状态机分支或操作的输入上的噪声?权力接地回路?你的平均计算和最佳总和似乎是正确的。你要求读者通过一个视野受限的钥匙孔窥视,同时告诉他们这不是一个在模拟中出现的数字问题,而不进行演示。这是这里吗?我从其他地方得到了一些可以理解的警告,但这一条上没有。主要的问题是,总结是否会这样做。因为我不知道这个手术需要多长时间,我想可能是时间问题。有没有办法对此进行分析?我怀疑您的闪烁问题是由于您的ADC和您的设计之间缺乏同步:当您的
CLK_IN
上升沿与输入数据的更改正好同时发生时,您的
hold_channel_x
寄存器会采样任何东西(以前值的一些位,新值的一些位,亚稳态的一些位…)如果我是对的,您需要一种方法将您的设计与ADC同步。注意:您的设计远比需要的复杂。VHDL是一种高级语言(数组类型、循环…)。