Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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_Fpga_Xilinx - Fatal编程技术网

Vhdl 我的波形中有一个时钟周期的信号错误

Vhdl 我的波形中有一个时钟周期的信号错误,vhdl,fpga,xilinx,Vhdl,Fpga,Xilinx,我有这个计划 我必须为它编写结构VHDL设计 这些是我的组成部分: 多路复用器: IEEE库; 使用IEEE.STD_LOGIC_1164.all; 实体多路复用器是 港口( A:标准逻辑向量(7到0); B:标准逻辑向量(7到0); Sel:以位表示; Z:输出标准逻辑向量(7到0) ); 端多路复用器; mux的架构是 开始 Z regB_out, Sel=>S1, Z=>mux1_res ); RegA:实体注册(Beh) 港口地图 ( LD=>LDA, C=>CLK, Reg_in=>

我有这个计划

我必须为它编写结构VHDL设计

这些是我的组成部分: 多路复用器:

IEEE库;
使用IEEE.STD_LOGIC_1164.all;
实体多路复用器是
港口(
A:标准逻辑向量(7到0);
B:标准逻辑向量(7到0);
Sel:以位表示;
Z:输出标准逻辑向量(7到0)
);
端多路复用器;
mux的架构是
开始
Z regB_out,
Sel=>S1,
Z=>mux1_res
);
RegA:实体注册(Beh)
港口地图
(
LD=>LDA,
C=>CLK,
Reg_in=>mux1_res,
R_out=>regA_out
);
Mux2:实体mux(Beh)
港口地图
(
A=>regA_out,
B=>Y,
Sel=>S0,
Z=>mux2_res
);
RB LDB,
C=>CLK,
Reg_in=>mux2_res,
R_out=>regB_out
);   
end Beh;
我不确定我是否正确地编写了RB、regB_out和B之间的bind。在S1和S0都等于0的波形中,我得到了1个CLK周期的不存在。就像在RB上600ns'01'的屏幕截图上不应该出现的那样。有人能帮我找出错误吗

试验台:

 library IEEE;
 use IEEE.std_logic_1164.all;
 use IEEE.std_logic_signed.all;
 use IEEE.numeric_std.all;

 ENTITY tbt is
 END tbt;

ARCHITECTURE behavior OF tbt IS


     COMPONENT TOP  

       PORT (
       CLK : in STD_LOGIC;   
       LDA, LDB, S1, S0 : in bit;
       X, Y : in STD_LOGIC_VECTOR(7 downto 0); 
       RB : out STD_LOGIC_VECTOR(7 downto 0)
       );
    END COMPONENT;


   signal CLK_sig   : std_logic;  
   signal LDA_sig, LDB_sig, S1_sig, S0_sig : bit :='0'; 
   signal X_sig, Y_sig, RB_sig      : std_logic_vector(7 downto 0):="00000000";   


   constant CLK_period : time := 100 ns;  
   constant s_per : time := 50 ns;
begin

-------------------------------------------------------------

uut: TOP PORT MAP (
    CLK =>  CLK_sig,
    LDA =>  LDA_sig,       
    LDB =>  LDB_sig,
    S1  =>  S1_sig,
    S0  =>  S0_sig,  
    X   =>  X_sig,    
    Y  => Y_sig,
    RB=>  RB_sig 
    );

-------------------------------------------------------------

CLK_process :process
begin
    CLK_sig <= '0';
    wait for CLK_period/2;
    CLK_sig <= '1';
    wait for CLK_period/2;
end process;

-------------------------------------------------------------

stim_proc: process    
     variable itertion_backwards : integer := 255;
    variable itertion_forward : integer := 0;

begin

    wait for CLK_period;

        for itertion_forward in 0 to 254 loop


                X_sig <= STD_LOGIC_VECTOR(TO_SIGNED(INTEGER(itertion_forward),8));  


                Y_sig <= STD_LOGIC_VECTOR(TO_SIGNED(INTEGER(itertion_backwards),8));     


                wait for CLK_period;
                S1_sig<= not S1_sig;

                wait for CLK_period;  
                S0_sig<= not S0_sig;  

                wait for CLK_period;
                LDA_sig<= not LDA_sig;

                wait for CLK_period;
                LDB_sig<= not LDB_sig;   


            itertion_backwards := itertion_backwards - 1;

        end loop;

    wait;

end process;


end;
IEEE库;
使用IEEE.std_logic_1164.all;
使用IEEE.std\u logic\u signed.all;
使用IEEE.numeric_std.all;
实体技术性贸易壁垒是
末端技术性贸易壁垒;
tbt的体系结构行为是
组件顶部
港口(
CLK:标准逻辑中;
LDA、LDB、S1、S0:以位为单位;
十、 Y:标准逻辑向量(7到0);
RB:out标准逻辑向量(7到0)
);
端部元件;
信号时钟信号:标准逻辑;
信号LDA_sig、LDB_sig、S1_sig、S0_sig:位:='0';
信号X_-sig、Y_-sig、RB_-sig:std_逻辑_向量(7到0):=“00000000”;
恒定时钟周期:时间=100纳秒;
每小时的常数s_:=50纳秒;
开始
-------------------------------------------------------------
uut:顶级端口图(
时钟=>时钟信号,
LDA=>LDA_信号,
LDB=>LDB_信号,
S1=>S1_信号,
S0=>S0_信号,
X=>X_sig,
Y=>Y_sig,
RB=>RB_信号
);
-------------------------------------------------------------
CLK_流程:流程
开始

CLK_sig为什么使用
bit
type?请尝试使用
std_logic
。在同步系统中,
LDA
LDB
S0
S1
的长度应为时钟周期的倍数。注意
CLK_sig
上的后缀等。您的错误似乎在于未提供的测试台。600纳秒时的转换是由于当S0变化时,
LDA
有效(在相同的增量周期内,
CLK
变为“1”)导致的。如果显示了
regA_out,这一点就很明显了。从寄存器活动时钟边缘偏移刺激。实体
mux
reg
top
中不可见,而
不使用work.all或所选名称(例如
实体工作.reg
),什么模拟器?谢谢回答。我将我的测试台添加到我的帖子中。昨晚我在测试台上修复了这个问题,在给Y_sig赋值之后,有一个等待CLK_的周期,我在LDB_sig赋值之后移动了它,去掉了那个“01”。但我的主要观点是关于这个'01'是,同时当LDA为1时,LDB也为1,所以它应该将Y_信号直接带到REG_B并在RB输出上。像这样,“01”存储在REG_A,但它不应该在输出RB上。或者它的发生是因为没有延迟,它捕捉到了这个'01',因为S0下降与CLK上升同步?你应该继续阅读。如果您不想处理它,请确保您的所有信号都在时钟边缘发生变化,并使用
等待上升沿(CLK)同样在你的测试台上,我甚至不知道这样的东西存在。谢谢:)
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity reg is
   port( 
    C : STD_LOGIC;
    LD : in bit; 
    Reg_in : in STD_LOGIC_VECTOR(7 downto 0); 
    R_out : out STD_LOGIC_VECTOR(7 downto 0)
    );
end reg;


architecture Beh of reg is  
begin

process (C) 
begin
    if (rising_edge (C)) then
        if (LD = '1') then
            R_out <= Reg_in;  
        end if;
    end if;
end process;


end Beh;
 library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity top is
   port( 
   LDA, LDB, S1, S0 : in bit; 
   CLK : in STD_LOGIC;
    X, Y : in STD_LOGIC_VECTOR(7 downto 0); 
    RB : out STD_LOGIC_VECTOR(7 downto 0)
    );
end top;

architecture Beh of top is  

signal regB_out : STD_LOGIC_VECTOR(7 downto 0); 
signal regA_out : STD_LOGIC_VECTOR(7 downto 0);
signal mux1_res :   STD_LOGIC_VECTOR(7 downto 0);  
signal mux2_res :   STD_LOGIC_VECTOR(7 downto 0); 
begin      

Mux1: entity mux(Beh) 
port map 
(
    A => X,
    B => regB_out,
    Sel => S1,
    Z => mux1_res
);

RegA: entity reg(Beh)
port map 
(
    LD => LDA,
    C => CLK,
    Reg_in => mux1_res,
    R_out => regA_out
);

Mux2: entity mux(Beh) 
port map 
(
    A => regA_out,
    B => Y,
    Sel => S0,
    Z => mux2_res
);
 RB<=regB_out;
RegB: entity reg(Beh)
port map 
(
    LD => LDB,
    C => CLK,
    Reg_in => mux2_res,
    R_out => regB_out
);   



end Beh;
 library IEEE;
 use IEEE.std_logic_1164.all;
 use IEEE.std_logic_signed.all;
 use IEEE.numeric_std.all;

 ENTITY tbt is
 END tbt;

ARCHITECTURE behavior OF tbt IS


     COMPONENT TOP  

       PORT (
       CLK : in STD_LOGIC;   
       LDA, LDB, S1, S0 : in bit;
       X, Y : in STD_LOGIC_VECTOR(7 downto 0); 
       RB : out STD_LOGIC_VECTOR(7 downto 0)
       );
    END COMPONENT;


   signal CLK_sig   : std_logic;  
   signal LDA_sig, LDB_sig, S1_sig, S0_sig : bit :='0'; 
   signal X_sig, Y_sig, RB_sig      : std_logic_vector(7 downto 0):="00000000";   


   constant CLK_period : time := 100 ns;  
   constant s_per : time := 50 ns;
begin

-------------------------------------------------------------

uut: TOP PORT MAP (
    CLK =>  CLK_sig,
    LDA =>  LDA_sig,       
    LDB =>  LDB_sig,
    S1  =>  S1_sig,
    S0  =>  S0_sig,  
    X   =>  X_sig,    
    Y  => Y_sig,
    RB=>  RB_sig 
    );

-------------------------------------------------------------

CLK_process :process
begin
    CLK_sig <= '0';
    wait for CLK_period/2;
    CLK_sig <= '1';
    wait for CLK_period/2;
end process;

-------------------------------------------------------------

stim_proc: process    
     variable itertion_backwards : integer := 255;
    variable itertion_forward : integer := 0;

begin

    wait for CLK_period;

        for itertion_forward in 0 to 254 loop


                X_sig <= STD_LOGIC_VECTOR(TO_SIGNED(INTEGER(itertion_forward),8));  


                Y_sig <= STD_LOGIC_VECTOR(TO_SIGNED(INTEGER(itertion_backwards),8));     


                wait for CLK_period;
                S1_sig<= not S1_sig;

                wait for CLK_period;  
                S0_sig<= not S0_sig;  

                wait for CLK_period;
                LDA_sig<= not LDA_sig;

                wait for CLK_period;
                LDB_sig<= not LDB_sig;   


            itertion_backwards := itertion_backwards - 1;

        end loop;

    wait;

end process;


end;