Naredili bomo komponento vezja, ki izračuna kvadrate in zmnožke kvadratov vhodnih vrednosti. Komponento bomo povezali na vodilo AXI Lite s pomočjo vnaprej pripravljenega paralelnega vmesnika. Naredili bomo simulacijo komponente s testno strukturo.
Najprej naredimo sekvenčno vezje, ki izračuna kvadrat vhodnih vrednosti. Vezje naj ima dva 8-bitna vhodna vektorja: a in b tipa std_logic_vector in dva 32-bitna izhoda: prod1 in prod2. Vrednosti binarnih vektorjev bomo obravnavali kot nepredznačena števila in za izvedbo računskih operacij v vezje vključimo knjižnico IEEE.numeric.std.
Naloga
Dodaj v projekt paralelni vmesnik za vodilo AXI in ga vključi v prejšnje vezje kot komponento. Vse signale vodila AXI deklariraj kot zunanje signale in poveži vhode in izhode na notranje registre.
Naloga
entity kvadrat is
-- Vmesnik AXI Slave (s0_axi), ADDR_WIDTH=4, DATA_WIDTH=32
port (s0_axi_aclk : in std_logic;
s0_axi_aresetn : in std_logic;
s0_axi_awaddr : in std_logic_vector(3 downto 0);
s0_axi_awprot : in std_logic_vector(2 downto 0);
s0_axi_awvalid : in std_logic;
s0_axi_awready : out std_logic;
s0_axi_wdata : in std_logic_vector(31 downto 0);
s0_axi_wstrb : in std_logic_vector(3 downto 0);
s0_axi_wvalid : in std_logic;
s0_axi_wready : out std_logic;
s0_axi_bresp : out std_logic_vector(1 downto 0);
s0_axi_bvalid : out std_logic;
s0_axi_bready : in std_logic;
s0_axi_araddr : in std_logic_vector(3 downto 0);
s0_axi_arprot : in std_logic_vector(2 downto 0);
s0_axi_arvalid : in std_logic;
s0_axi_arready : out std_logic;
s0_axi_rdata : out std_logic_vector(31 downto 0);
s0_axi_rresp : out std_logic_vector(1 downto 0);
s0_axi_rvalid : out std_logic;
s0_axi_rready : in std_logic);
parvmes : parvmes_v1_0_s0_AXI
generic map (
C_S_AXI_DATA_WIDTH => 32,
C_S_AXI_ADDR_WIDTH => 4
)
port map (
p0_dataout => a,
p1_dataout => b,
p2_datain => prod1,
p3_datain => prod2,
S_AXI_ACLK => s0_axi_aclk ...
Uporabi testno strukturo za simulacijo delovanja komponente. Testna struktura naj generira signale vodila AXI Lite.