Portál AbcLinuxu, 1. května 2025 07:00
začína to konečne vyzerať, že sa s tým dá niečo robiť... nenapíšete čitateľom nabudúce ukážkový 64bitový procesor? :)))
A teraz Vážne! Chcel som sa spýtať, či je existujú postupy na optimalizáciu hotových návrhov? Možno niekdo potrebuje usporiť a radšej by použil viacero lacnejších odvodov, ako pár drahšich.
LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL; ENTITY registers IS GENERIC ( data_w : natural := 8; addr_w : natural := 2; num_regs : natural := 4 ); PORT ( res : IN std_logic; clk : IN std_logic; wr_en : IN std_logic; addr : IN std_logic_vector(addr_w-1 DOWNTO 0); data_in : IN std_logic_vector(data_w-1 DOWNTO 0); data_out : OUT std_logic_vector(data_w-1 DOWNTO 0) ); END registers; ARCHITECTURE rtl OF registers IS SUBTYPE reg_t IS std_logic_vector(data_w-1 DOWNTO 0); TYPE reg_arr_t IS ARRAY (num_regs-1 DOWNTO 0) OF reg_t; SIGNAL rg_ar_reg : reg_arr_t; SIGNAL rg_ar_cmb : reg_arr_t; SIGNAL rg_wr_cmb : std_logic_vector(num_regs-1 DOWNTO 0); SIGNAL rg_sel_cmb : std_logic_vector(num_regs-1 DOWNTO 0); BEGIN gen_reg_array: FOR i IN 0 TO num_regs-1 GENERATE ---- -- Registers Array ---- rg_ar_reg_proc: PROCESS (res, clk) BEGIN IF (res = '1') THEN rg_ar_reg(i) <= (OTHERS => '0'); ELSIF (clk'EVENT AND clk ='1') THEN rg_ar_reg(i) <= rg_ar_cmb(i); END IF; END PROCESS rg_ar_reg_proc; ---- -- Register selection ---- sel_reg_cmb_proc: PROCESS (addr, wr_en) VARIABLE sel_v : std_logic_vector(num_regs-1 DOWNTO 0); BEGIN sel_v := (OTHERS => '0'); sel_v(conv_integer(unsigned(addr))) := '1'; rg_sel_cmb <= sel_v; END PROCESS sel_reg_cmb_proc; ---- -- Registers array next ---- rg_ar_cmb_proc: PROCESS (data_in, rg_ar_reg, rg_sel_cmb, wr_en) BEGIN IF (rg_wr_cmb(i)= '1' AND wr_en='1') THEN rg_ar_cmb(i) <= data_in; ELSE rg_ar_cmb(i) <= rg_ar_reg(i); END IF; END PROCESS rg_ar_cmb_proc; END GENERATE gen_reg_array; ---- -- Data output selection ---- data_sel_cmb_proc: PROCESS (rg_ar_reg, addr) VARIABLE addr_v : natural; BEGIN addr_v := conv_integer(unsigned(addr)); data_out <= rg_ar_reg(addr_v); END PROCESS; END rtl;I tady je co vylepsovat. Napriklad registrovat vystup. Vasi poznamku o hokeji v casovani jsem nejak nepochopil. Co pipeline??? Jinak v tom Vasem kodu je chyba a nejde zkompilovat ("ADDR"!="A").
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.