首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XADC测试台vivado仿真-模拟信号问题

XADC测试台vivado仿真-模拟信号问题
EN

Stack Overflow用户
提问于 2019-01-20 11:40:56
回答 2查看 1.4K关注 0票数 0

一旦UART_RXD_PIN设置为"1“,我已经完成了将数据从XADC传递到其他组件的项目。我在这个项目中使用BASYS3板。现在是时候创建模拟模拟信号的测试平台,并将其传递给4个不同的xadc引脚。

我已经尝试了很少的例子(在互联网上),但是他们使用VERILOG而不是VHDL,XADC没有像我的项目那样被用作组件。我创建了"supermain.vhdl“,其中top_main是组件,因此vivado可以自己模拟XADC,但是它不能工作。

这是我的代码:

代码语言:javascript
复制
entity top_main is
    Port (
        CLK              : IN  STD_LOGIC;   
        UART_TXD_pin     : IN  STD_LOGIC;
        UART_RXD_pin     : OUT STD_LOGIC
    );  
end top_main;

architecture Behavioral of top_main is

    -- COMPONENTS --
-- XADC --
COMPONENT XADC_block_input
PORT (
    di_in               : IN  STD_LOGIC_VECTOR(15 DOWNTO 0);
    daddr_in            : IN  STD_LOGIC_VECTOR(6 DOWNTO 0);
    den_in              : IN  STD_LOGIC;
    dwe_in              : IN  STD_LOGIC;
    drdy_out            : OUT STD_LOGIC;
    do_out              : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
    dclk_in             : IN  STD_LOGIC;
    vp_in               : IN  STD_LOGIC;
    vn_in               : IN  STD_LOGIC;
    reset_in            : IN  STD_LOGIC;
    ------------------------------------    
    vauxp6              : IN  STD_LOGIC;
    vauxn6              : IN  STD_LOGIC;
    vauxp7              : IN  STD_LOGIC;
    vauxn7              : IN  STD_LOGIC;
    vauxp14             : IN  STD_LOGIC;
    vauxn14             : IN  STD_LOGIC;
    vauxp15             : IN  STD_LOGIC;
    vauxn15             : IN  STD_LOGIC;
    ------------------------------------    
    channel_out         : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
    eoc_out             : OUT STD_LOGIC;
    alarm_out           : OUT STD_LOGIC;
    eos_out             : OUT STD_LOGIC;
    busy_out            : OUT STD_LOGIC
);
END COMPONENT;








type    pmod_addresses is array (0 to 3) of std_logic_vector(6 downto 0); 
constant adress_pmod        : pmod_addresses :=("0010110","0010111","0011110","0011111");   -- 6/7/14/15 -> PORTS XADC --
signal  DataValid           : STD_LOGIC;                                                    -- DATA IN VALID
signal  DataReady           : STD_LOGIC;                                                    -- DATA READY (FOR FFT)
signal  index               : INTEGER := 0;                                                 -- INDEX FOR ADC
signal  DataOut             : STD_LOGIC_VECTOR(15 DOWNTO 0);                                -- DATA ADC OUT
signal  nr_adc              : STD_LOGIC_VECTOR(6 downto 0) := adress_pmod(0);   

    -- PORT MAPS --
-- ADC --
XADC_PORT_MAP: XADC_block_input
PORT MAP (
    di_in       => X"0000",
    daddr_in    => nr_adc,
    den_in      => DataValid,
    dwe_in      => '0',
    drdy_out    => DataReady,
    do_out      => DataOut,
    dclk_in     => CLK_128MHz,
    vp_in       => '0',
    vn_in       => '0',
    reset_in    => MASTER_RESET, 
    ------------------------------------    
    vauxp6      => ADC_6P_J3,
    vauxn6      => ADC_6N_K3,
    vauxp7      => ADC_7P_M2,
    vauxn7      => ADC_7N_M1,
    vauxp14     => ADC_14P_L3,
    vauxn14     => ADC_14N_M3,
    vauxp15     => ADC_15P_N2,
    vauxn15     => ADC_15N_N1,
    ------------------------------------    
    channel_out => open,
    eoc_out     => DataValid,
    alarm_out   => open,
    eos_out     => open,
    busy_out    => open
);

-- ADC DATA FORWARDING --
p_XADC_PORT_ADDRESING: process(CLK_128MHz)
begin
    if(rising_edge(CLK_128MHz)) then
        if(DataReady = '1') then       
            case nr_adc is
                when adress_pmod(0) =>   
                    XADC_1_FIR_1 <= DataOut ;
                when adress_pmod(1) =>   
                    XADC_2_FIR_2 <= DataOut ;
                when adress_pmod(2) =>   
                    XADC_3_FIR_3 <= DataOut ;
                when adress_pmod(3) =>   
                    XADC_4_FIR_4 <= DataOut ;
                when others =>
                    XADC_1_FIR_1 <= (others=>'0'); 
                    XADC_2_FIR_2 <= (others=>'0'); 
                    XADC_3_FIR_3 <= (others=>'0'); 
                    XADC_4_FIR_4 <= (others=>'0'); 
                end case;
            if index = 0 then
                index <= 1;
            else 
                index <= 0;
            end if;
            nr_adc  <= adress_pmod(index);
        end if;
    end if;
end process p_XADC_PORT_ADDRESING;

这里是超级主,只有实体和测试平台代码。

代码语言:javascript
复制
entity supermain is
     Port (
    CLK              : IN  STD_LOGIC;    
    UART_TXD_pin     : IN  STD_LOGIC;
    UART_RXD_pin     : OUT STD_LOGIC
);

end supermain;

architecture Behavioral of supermain is

component top_main
    Port (
        CLK              : IN  STD_LOGIC;   
        UART_TXD_pin     : IN  STD_LOGIC;
        UART_RXD_pin     : OUT STD_LOGIC
    );  
end component;

begin

symulacja : top_main
  PORT MAP (
    CLK                 => CLK,
    UART_TXD_pin        => UART_TXD_pin,
    UART_RXD_pin        => UART_RXD_pin
    );  



    end Behavioral;


    entity supermain_tb is
end;

architecture bench of supermain_tb is

  component supermain
       Port (
      CLK              : IN  STD_LOGIC;    
      UART_TXD_pin     : IN  STD_LOGIC;
      UART_RXD_pin     : OUT STD_LOGIC
  );
  end component;

  signal CLK: STD_LOGIC;
  signal UART_TXD_pin: STD_LOGIC;
  signal UART_RXD_pin: STD_LOGIC ;

  constant clock_period: time := 1 ms;
  signal stop_the_clock: boolean;


begin

  uut: supermain port map ( CLK          => CLK,
                            UART_TXD_pin => UART_TXD_pin,
                            UART_RXD_pin => UART_RXD_pin );

  stimulus: process
  begin
   UART_TXD_pin <= '1' after 100 ns, '0' after 100 ns;
    -- Put initialisation code here


    -- Put test bench stimulus code here
    wait;
  end process;

  clocking: process
  begin
    while not stop_the_clock loop
      CLK <= '0', '1' after clock_period / 2;
      wait for clock_period;
    end loop;
    wait;
  end process;

end;

你能告诉我如何在试验台上模拟模拟信号吗?因为现在它甚至没有

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-25 17:53:00

要模拟模拟输入,需要使用模拟刺激文件。

在UG480 XADC.pdf中有一个示例,包括刺激文件和testbench。

SIM_MONITOR_FILE => "design.txt“--模拟模拟数据文件名

您还可以在Vivado语言模板Vivado语言模板中看到刺激文件的示例

票数 0
EN

Stack Overflow用户

发布于 2019-01-20 12:29:34

您可以而不是连接模拟信号到该模型。

不知道如何产生模拟信号并不重要,因为即使,如果,你可以产生一个模拟信号,模型不能接受它。

例如,要模拟模拟信号,可以使用real类型的信号。

但是,为了接受这样的模拟信号,该模型将需要real类型的输入端口。

我怀疑选择了STD_LOGIC端口类型,因为合成工具不会接受类型'real‘的端口。因此,在这方面,模型是有缺陷的。解决方案是有两个模型:一个用于模拟,另一个用于综合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54276063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档