Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 - Fatal编程技术网

Vhdl 需要一些帮助伪随机数生成器吗

Vhdl 需要一些帮助伪随机数生成器吗,vhdl,Vhdl,我遇到了一个问题,伪随机数生成器带有一个计数器,用来检查我是否处理不可约多项式。geenrator可以正常工作,但如果我尝试将其用作子模块,计数器就不能正常工作。有什么想法吗 -- x^6 + x^5 + x^3 + x^2 + 1 Library IEEE; use ieee.numeric_std.all; use IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_unsigned.all; entity EPZG is port (CL

我遇到了一个问题,伪随机数生成器带有一个计数器,用来检查我是否处理不可约多项式。geenrator可以正常工作,但如果我尝试将其用作子模块,计数器就不能正常工作。有什么想法吗

-- x^6 + x^5 + x^3 + x^2 + 1

Library IEEE;
use ieee.numeric_std.all;

use IEEE.STD_LOGIC_1164.ALL;

use ieee.std_logic_unsigned.all;


entity EPZG is
   port (CLK:       in std_logic;                      
         EQ:        out bit_vector(5 downto 0);  
             A :        out bit );
 end EPZG;

 architecture behaviour of EPZG is 
 component Counter is port ( CLK, RESET : in std_logic;
   result: out bit_vector(5 downto 0)); 
 end component;

signal SZ: bit; 
signal SEQ : bit_vector(5 downto 0); 
signal CNT_RESET : std_logic; 
signal CNT_RESULT : bit_vector(5 downto 0);
begin 
  SZ <= '1';
  PZG : process(CLK)
  begin
  CNT_RESET <= '1';

    if (CLK'event and CLK ='1') then
       SEQ(0) <= SZ xor SEQ(5);
       SEQ(1) <= SEQ(0);
       SEQ(2) <= SEQ(1) xor SEQ(5);
       SEQ(3) <= SEQ(2) xor SEQ(5);
       SEQ(4) <= SEQ(3);
       SEQ(5) <= SEQ(4) xor SEQ(5);
    end if;
end process PZG;
EQ <= SEQ;
CNT: Counter port map ( CLK , RESET =>CNT_RESET,result =>CNT_RESULT);
end behaviour;
--x^6+x^5+x^3+x^2+1
图书馆IEEE;
使用ieee.numeric_std.all;
使用IEEE.STD_LOGIC_1164.ALL;
使用ieee.std_logic_unsigned.all;
实体EPZG是
端口(时钟:在标准逻辑中;
EQ:输出位_向量(5到0);
A:输出位);
结束EPZG;
EPZG的架构行为是
组件计数器为端口(CLK,复位:在标准逻辑中;
结果:输出位_向量(5到0);
端部元件;
信号SZ:bit;
信号顺序:位_向量(5到0);
信号CNT_复位:标准_逻辑;
信号CNT_结果:位_向量(5到0);
开始

那好吧,再来一次。您的计数器模块永远不会重置,因此,
pre_counter
永远不会初始化-这将至少在模拟中为您提供未定义的结果。在顶级代码中为其生成重置,或将其初始化为:

signal pre_counter: std_logic_vector(5 downto 0) := (others => '0');
此外,计数器模块中的流程代码可能需要进行一些调整。过程灵敏度列表包含
clk
reset
,但您的过程使用同步重置。您应该通过同步重置和灵敏度列表中的
clk
来进行处理:

process(clk)
begin
  if(rising_edge(clk)) then
    if(reset = '1') then
    (...)
process(clk, reset)
begin
  if(reset = '1') then
    (...)
  elsif(rising_edge(clk)) then
    (...)
或者在灵敏度列表中使用异步复位和
clk
reset

process(clk)
begin
  if(rising_edge(clk)) then
    if(reset = '1') then
    (...)
process(clk, reset)
begin
  if(reset = '1') then
    (...)
  elsif(rising_edge(clk)) then
    (...)

还请注意使用了
rising_edge()
函数,这是检查边缘的“现代”方法。

“需要一些帮助”不是问题描述……如果您也发布计数器模块的代码,可能会有所帮助。我刚刚添加了计数器代码。它不起作用。我的问题是:我没有得到CNT_ResultTheh中计数器的结果-我不知道如果名称相同,实际上可以将信号映射到这样的端口。。。啊,好吧。哦,老兄,非常感谢它能工作:))但说实话,我不明白问题出在哪里?
pre_计数器
没有初始化,所以模拟器只会将其设置为未定义。
pre\u计数器