Recept a következő. Megírjuk a VHDL állományt a következő (vagy ehhez hasonló) módon:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;
entity mymux is
Port ( a : in STD_LOGIC_VECTOR(31 downto 0);
b : in STD_LOGIc_VECTOR(31 downto 0);
result : out STD_LOGIC_VECTOR(31 downto 0);
clk : in STD_LOGIC);
end mymux;
architecture Behavioral of mymux is
begin
countit: process(clk,a,b)
begin
if rising_edge(clk) then
result<=a*b;
end if;
end process;
end Behavioral;
Ha ezzel megvagyunk, akkor végignyomkodjuk a Hardware/Create or Import peripheral menüpont alatt előbukkanó ablakokat. Ezután megnyitjuk a júzer_logic.vhd állományt és kiegészítjük a következő részekkel:
architecture IMP of user_logic is
--USER signal declarations added here, as needed for user logic
COMPONENT mymux
Port ( a : in STD_LOGIC_VECTOR(31 downto 0);
b : in STD_LOGIc_VECTOR(31 downto 0);
result : out STD_LOGIC_VECTOR(31 downto 0);
clk : in STD_LOGIC);
END COMPONENT;
signal out_value : STD_LOGIC_VECTOR(31 downto 0);
Bemásolunk a következő részt ugyanebbe a fájlba, csak egy kicsit lennebb:
--USER logic implementation added here
MITTUDOMEN : mymux
port map
(
a => slv_reg0,
b => slv_reg1,
result => out_value,
clk => Bus2IP_Clk);
Még egy lépés van hátra ebben az állományban. A kiíratás megbuherálása. Mert na... Mert azt úgy kell. mert hanem nem fog menni, viszont nem ad hibát. Csak idegesít. De nagyon...
-- implement slave model software accessible register(s) read mux
SLAVE_REG_READ_PROC : process( slv_reg_read_sel, slv_reg0, slv_reg1, slv_reg2, out_value ) is
begin
case slv_reg_read_sel is
when "100" => slv_ip2bus_data <= slv_reg0;
when "010" => slv_ip2bus_data <= slv_reg1;
when "001" => slv_ip2bus_data <= "00000000000000000000000000000000" & out_value;
when others => slv_ip2bus_data <= (others => '0');
end case;
end process SLAVE_REG_READ_PROC;
Ezután már csak a java van hátra. Rescan User Repositories, majd mux berakni, rákötni az mp_plb buszra és megírni a programot, ami beüzemeli ezeket a prekonfigurált állományokat. A forráskód, komment nélkül a következő:
#include "xparameters.h"
#include "stdio.h"
#include "xstatus.h"
#include "xuartlite.h"
#include "mux.h"
//====================================================
int main (void) {
unsigned int serial_data,mux_data;
xil_printf("-- Entering main() --\r\n");
xil_printf("Write the first number: ");
serial_data = XUartLite_RecvByte(XPAR_RS232_PORT_BASEADDR);
MUX_mWriteReg(XPAR_MUX_0_BASEADDR, MUX_SLV_REG0_OFFSET, serial_data);
xil_printf("Write the second number: ");
serial_data = XUartLite_RecvByte(XPAR_RS232_PORT_BASEADDR);
MUX_mWriteReg(XPAR_MUX_0_BASEADDR, MUX_SLV_REG1_OFFSET, serial_data);
mux_data = MUX_mReadReg(XPAR_MUX_0_BASEADDR, MUX_SLV_REG2_OFFSET);
xil_printf("Mux return value : %d .\n",mux_data);
xil_printf("-- Exiting main() --\r\n");
return 0;
}
Ha ez mind megvolt, akkor a következőt láthatjuk a soros konzol ablakban :
ASCII "1" = 49, ASCII "2" = 50. S azt már mindenki tudja fejből, hogy 49*50 = 2450. S megint mindenki boldog. Csak szegény szarvas nem...
1 megjegyzés:
Nagyon ügyi vagy öcsike:D Kitartast...
Megjegyzés küldése