⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hs.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 2 页
字号:
     v.dq_dqs_oe := '0';     if v.cnt = v.use_bl then              v.cmdDone(v.cur_ahb)  := v.cur_buf(v.cur_ahb);       if v.begin_write = '0' then      -- No new write is following         v.sync_adr(v.cur_ahb) := (v.cur_buf(v.cur_ahb)+1) & "00";         v.cnt      := 0;         v.rwstate  := idle;        else                             -- New write is following          v.sync_adr(v.cur_ahb) := (v.cur_buf(v.cur_ahb)+1) & "00";         if v.use_bl = 2 then           v.sync_adr(v.use_ahb) := (v.use_buf +1) & "00";         else           v.sync_adr(v.use_ahb) := v.use_buf & "01";         end if;         v.cur_buf(v.use_ahb)   := v.use_buf;         v.cur_ahb   := v.use_ahb;         v.cnt       := 2;       end if;     else       v.cnt := v.cnt +2;       if v.cnt = v.use_bl then         v.sync_adr(v.cur_ahb) := (v.cur_buf(v.cur_ahb)+1) & "00";       else         v.sync_adr(v.cur_ahb) := v.sync_adr(v.cur_ahb)+1;       end if;     end if;       -- Read  when r =>    v.cmdDone(v.cur_ahb) := v.cur_buf(v.cur_ahb);    if v.use_cas = '0' then             -- Cas 2 or 3      v.sync_wdata((2*dqsize)-1 downto 0) :=  dq1_i & dq2_i;    else                                -- Cas 2.5      v.sync_wdata((2*dqsize)-1 downto 0) :=  dq2_i & dq1del_i;    end if;    if v.cnt = v.use_bl then      if v.begin_read = '0' then        v.sync_write := "00";        v.sync_adr(v.cur_ahb) := (v.cur_buf(v.cur_ahb)+1) & "00";        v.cnt        := 0;        v.rwstate    := idle;      else        v.sync_adr(v.cur_ahb) := (v.cur_buf(v.cur_ahb)+1) & "00";        v.cnt        := 2;        v.cur_ahb   := v.use_ahb;        v.cur_buf(v.use_ahb)   := v.use_buf;        v.sync_adr(v.use_ahb) := v.use_buf & "00";        if v.use_ahb = 0 then          v.sync_write := "01";        else          v.sync_write := "10";        end if;      end if;    else      v.cnt := v.cnt +2;      v.sync_adr(v.cur_ahb) := v.sync_adr(v.cur_ahb) +1;    end if;        end case;   -- Calculate and set data mask   if v.use_ml+1 < v.cnt then    v.dm1_o := (others => '1');    v.dm2_o := (others => '1');  elsif v.use_ml+1 = v.cnt then    v.dm1_o(dmsize-1 downto 0) := hssi.dsramso(v.use_ahb).dataout2((2*dqsize+dmsize)-1 downto (2*dqsize));    v.dm2_o := (others => '1');  else    v.dm1_o(dmsize-1 downto 0) := hssi.dsramso(v.use_ahb).dataout2((2*dqsize+dmsize)-1 downto (2*dqsize));    v.dm2_o(dmsize-1 downto 0) := hssi.dsramso(v.use_ahb).dataout2((2*dqsize+2*dmsize)-1 downto (2*dqsize+dmsize));  end if;    --------------------------------------------------------------------------------- Register and reset    if rst = '0' then    v.cbufstate := no_cmd;    v.cmdstate  := idle;    v.rwstate   := idle;    v.cur_buf   := (others => (others => '1'));    v.cur_ahb   := 0;    v.use_bl    := 4;    v.use_ml    := 2;    v.use_buf   := (others => '1');    v.use_cas   := '0';    v.rw_cmd    := CMD_NOP;    v.rw_bl     := 4;    v.rw_cas    := 2;    v.next_bl   := 4;    v.next_ml   := 2;    v.next_buf  := (others => '1');    v.next_cas  := "00";    v.next_adr  := (others => '0');    v.next_cs   := "11";    v.next_cmd  := CMD_NOP;    v.set_cmd   := CMD_NOP;    v.set_adr   := (others => '0');    v.set_cs    := "00";    v.set_cke   := '0';    v.hs_busy   := '0';    v.cmdDone   := (others => (others => '1'));    v.begin_read  := '0';    v.begin_write := '0';    v.dq_dqs_oe := '1';    v.w_ce      := '0';    v.r_ce      := '0';    v.cnt       := 0;    v.holdcnt   := 0;    v.r2wholdcnt:= 0;    v.act2precnt:= 0;    v.wait_time := 10;    v.readwait  := (others => '0');    v.writewait := (others => '0');    v.dm1_o     := (others => '1');    v.dm2_o     := (others => '1');    v.dqs1_o    := '0';    v.sync_adr  := (others => (others => '0'));    v.sync_write := "00";    v.sync_wdata := (others => '0');  end if;  rwri <= v; -- Combinatiorial outputs  hsso.hs_busy <= v.hs_busy;  dqs1_o <= v.dqs1_o;  dqs2_o <= '0';  hsso.dsramsi(0).address2 <= v.sync_adr(0);  hsso.dsramsi(0).write2 <= v.sync_write(0);  hsso.dsramsi(0).datain2 <= v.sync_wdata;  hsso.dsramsi(1).address2 <= v.sync_adr(1);  hsso.dsramsi(1).write2 <= v.sync_write(1);  hsso.dsramsi(1).datain2 <= v.sync_wdata;end process;--------------------------------------------------------------------------------- Clocked processes-- CLK0, Main registerrwclk : process(clk0)  begin    if rising_edge(clk0) then      rwr <= rwri;      -- Registered outputs      r_ce <= rwri.r_ce;      w_ce <= rwri.w_ce;      hsso.cmdDone <= rwri.cmdDone;      dm1_o <= rwri.dm1_o((dmsize-1) downto 0);      dm2_o <= rwri.dm2_o((dmsize-1) downto 0);      -- Registers      dq1del_i <= dq1_i;      dq1_o <= hssi.dsramso(rwri.use_ahb).dataout2(dqsize-1 downto 0);      dq2_o <= hssi.dsramso(rwri.use_ahb).dataout2((2*dqsize)-1 downto dqsize);          end if;end process;     ---- CLK270, Drives output enable signal--oeclk : process(rst, clk270)--  begin--    if rst = '0' then--      hsso.ddsi.dq_dqs_oe <= '1';--    elsif rising_edge(clk270) then--      hsso.ddsi.dq_dqs_oe <= rwri.dq_dqs_oe;--    end if;--  end process;-- CLK0, Drives control signals cmdclk : process(clk0)  begin     if rising_edge(clk0) then      hsso.ddsi.control <= rwri.set_cmd;      hsso.ddsi.adr     <= rwri.set_adr((adrbits-3) downto 0);      hsso.ddsi.ba      <= rwri.set_adr((adrbits-1) downto (adrbits-2));      hsso.ddsi.cs      <= rwri.set_cs;      hsso.ddsi.cke     <= rwri.set_cke;       end if; end process;    vcc <= '1';  gnd <= '0';  data_in <= hssi.ddso.dq((dqsize-1) downto 0);  hsso.ddsi.dq((dqsize-1) downto 0) <= data_out;  hsso.ddsi.dqs((strobesize-1) downto 0) <= strobe_out;  hsso.ddsi.dm((dmsize-1) downto 0) <= mask_out;  dqot : if dqsize < maxdqsize generate     hsso.ddsi.dq((maxdqsize-1) downto dqsize) <= (others => '-');  end generate;  dqsot : if strobesize < maxstrobesize generate     hsso.ddsi.dqs((maxstrobesize-1) downto strobesize) <= (others => '-');  end generate;  dmot : if dmsize <= maxdmsize generate    hsso.ddsi.dm((maxdmsize-1) downto dmsize) <= (others => '-');  end generate;--------------------------------------------------------------------------------- DDR IO registers------------------------------------------------------------------------------- -- Input and Output DQ             dqio : for i in 0 to (dqsize-1) generate        in1 : ddr_ireg generic map( tech => tech)          port map(            Q1 => dq1_i(i),            Q2 => dq2_i(i),            C1 => clk0,                            C2 => clk180,                            CE => vcc, --r_ce,                          D  => data_in(i),            R  => gnd,            S  => gnd);             out1  : ddr_oreg        generic map( tech => tech)        port map(          Q  => data_out(i),          C1 => clk180,          C2 => clk0,                            CE => vcc, --w_ce,                 D1 => dq1_o(i),          D2 => dq2_o(i),          R  => gnd,          S  => gnd);      dq_tri : ddr_oreg generic map(          tech => tech)        port map(        Q  => hsso.ddsi.dq_oe(i),        C1 => clk180,        C2 => clk0,                          CE => vcc, --w_ce,               D1 => rwri.dq_dqs_oe,        D2 => rwri.dq_dqs_oe,        R  => gnd,        S  => gnd);    end generate; -- output DQS dqsio : for i in 0 to (strobesize-1) generate     dqso : ddr_oreg      generic map(        tech => tech)      port map(        Q  => strobe_out(i),        C1 => clk270,        C2 => clk90,        CE => vcc,        D1 => dqs1_o,         D2 => dqs2_o,        R  => gnd,        S  => gnd);     dqso_tri : ddr_oreg      generic map(        tech => tech)      port map(        Q  => hsso.ddsi.dqs_oe(i),        C1 => clk270,        C2 => clk90,                          CE => vcc, --w_ce,               D1 => rwri.dq_dqs_oe,        D2 => rwri.dq_dqs_oe,        R  => gnd,        S  => gnd); end generate; -- Output DM           dmo : for i in 0 to (dmsize-1) generate      U4 : ddr_oreg        generic map(          tech => tech)        port map(          Q  => mask_out(i),          C1 => clk180,          C2 => clk0,          CE => vcc, --w_ce,                --write_ce          D1 => dm1_o(i),           D2 => dm2_o(i),          R  => gnd,          S  => gnd);      end generate;          end rtl;          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -