亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mmu_dcache.vhd

?? leon3 source code 雖然gaisler網站上有下載
?? VHD
?? 第 1 頁 / 共 4 頁
字號:
        when "01" =>          if maddress(1) = '0' then            ddatainv(i) := edata(15 downto 0) & dcramov.data(i)(15 downto 0);          else            ddatainv(i) := dcramov.data(i)(31 downto 16) & edata(15 downto 0);          end if;        when others =>           ddatainv(i) := edata;        end case;      end loop;-- handle double load with pipeline hold    if (r.dstate = idle) and (r.nomds = '1') then      rdatav(0) := r.wb.data2; mexc := r.mexc; set := 0; --FIXME    end if;-- Handle AHB retry. Re-generate bus request and burst    if mcdo.retry = '1' then      v.req := '1';      v.burst := r.wb.size(0) and r.wb.size(1) and not r.wb.addr(2);    end if;-- Generate new valid bits    vmaskdbl := decode(maddress(LINE_HIGH downto LINE_LOW+1));    if (size = "11") and (read = '0') then       for i in 0 to (DLINE_SIZE - 1) loop vmaskraw(i) := vmaskdbl(i/2); end loop;    else      vmaskraw := decode(maddress(LINE_HIGH downto LINE_LOW));    end if;    vmask := (others => vmaskraw);    if r.hit = '1' then       for i in 0 to DSETS-1 loop vmask(i) := r.valid(i) or vmaskraw; end loop;    end if;    if r.dstate = idle then       for i in 0 to DSETS-1 loop        vmask(i) := dcramov.tag(i)(dlinesize-1 downto 0) or vmaskraw;      end loop;    end if;    if (mcdo.mexc or r.flush) = '1' then twrite := '0'; dwrite := '0'; end if;    if twrite = '1' then      if tagclear = '1' then vmask := (others => (others => '0')); end if;      v.valid := vmask;      if (DSETS>1) and (DCREPLACE = lru) and (tdiagwrite = '0') then        vl.write := '1'; vl.set := setrepl;      end if;    end if;    if (DSETS>1) and (DCREPLACE = lru) and (rl.write = '1') then      vl.lru(conv_integer(rl.waddr)) :=        lru_calc(rl.lru(conv_integer(rl.waddr)), conv_integer(rl.set));    end if;    if tdiagwrite = '1' then -- diagnostic tag write      if (dsu = 1) and (dci.dsuen = '1') then        vmask := (others => dci.maddress(dlinesize - 1 downto 0));              else         vmask := (others => dci.edata(dlinesize - 1 downto 0));        newtag(TAG_HIGH downto TAG_LOW) := dci.edata(TAG_HIGH downto TAG_LOW);        newptag(TAG_HIGH downto TAG_LOW) := dci.edata(TAG_HIGH downto TAG_LOW);        for i in 0 to 3 loop wlrr(i)  := dci.edata(CTAG_LRRPOS); end loop;        for i in 0 to DSETS-1 loop wlock(i) := dci.edata(CTAG_LOCKPOS); end loop;      end if;    end if;    -- mmureg write    if mmuregw = '1' then      case mmudiagaddr is        when CNR_CTRL =>          v.mmctrl1.e      := mmuwdata(MMCTRL_E);          v.mmctrl1.nf     := mmuwdata(MMCTRL_NF);          v.mmctrl1.pso    := mmuwdata(MMCTRL_PSO);          v.mmctrl1.tlbdis := mmuwdata(MMCTRL_TLBDIS);          --custom           -- Note: before tlb disable tlb flush is required !!!          when CNR_CTXP =>          v.mmctrl1.ctxp := mmuwdata(MMCTXP_U downto MMCTXP_D);        when CNR_CTX =>          v.mmctrl1.ctx  := mmuwdata(MMCTXNR_U downto MMCTXNR_D);        when CNR_F => null;        when CNR_FADDR => null;        when others => null;      end case;    end if;            -- cache flush    --if (dci.flush or flush or mcdo.dflush) = '1' then    if (dci.flush or flush ) = '1' then      v.flush := '1'; v.faddr := (others => '0'); v.pflush := pflush;      v.pflushr := '1';      v.pflushaddr := pflushaddr;      v.pflushtyp := pflushtyp;    end if;        if r.flush = '1' then            twrite := '1'; vmask := (others=>(others => '0')); v.faddr := r.faddr +1;       newtag(TAG_HIGH downto TAG_LOW) := (others => '0');      newptag(TAG_HIGH downto TAG_LOW) := (others => '0');      taddr(OFFSET_HIGH downto OFFSET_LOW) := r.faddr;      wlrr := (others => '0'); v.lrr := '0';       if (r.faddr(DOFFSET_BITS -1) and not v.faddr(DOFFSET_BITS -1)) = '1' then	v.flush := '0';      end if;            if DSNOOP2 = 2 then        vh.hit(conv_integer(taddr(OFFSET_HIGH downto OFFSET_LOW))) := (others => '0');      end if;    end if;-- AHB snoop handling (2), bypass write data on read/write contention    if DSNOOP2 /= 0 then      if tdiagwrite = '1' then snoopset2 := ddset;       else snoopset2 := conv_integer(setrepl); end if;      if DSNOOP2 = 2 then        vh.taddr := taddr(OFFSET_HIGH downto OFFSET_LOW);        vh.set := conv_std_logic_vector(set, SETBITS);	if (twrite = '1') and (r.dstate /= idle) then 	  vh.hit(conv_integer(taddr(OFFSET_HIGH downto OFFSET_LOW)))(snoopset2) := '0';	end if;      else        if rs.addr(OFFSET_HIGH  downto OFFSET_LOW) = 	  taddr(OFFSET_HIGH  downto OFFSET_LOW) 	then 	  if twrite = '0' then             if snoopwe = '1' then              vs.writebp(snoopset) := '1';              if DEST_RW then enable(snoopset) := '0'; end if;                          end if;	  else            if (snoopwe = '1') and (conv_integer(setrepl) = snoopset) then -- avoid write/write contention              twrite := '0';              if DEST_RW then enable(snoopset) := '0'; end if;                          end if; 	  end if;	end if;      end if;      if (r.dstate = wread) and ((rbphit and rs.snoop) = '1') then v.hit := '0'; end if;      if DEST_RW then        -- disable snoop read enable on write/read contention        if taddr(OFFSET_HIGH downto OFFSET_LOW) = ahbsi.haddr(OFFSET_HIGH  downto OFFSET_LOW) then          for i in 0 to DSETS-1 loop            if (twrite and senable(i)) = '1' then senable(i) := '0'; end if;          end loop;        end if;      end if;    end if;-- update cache with memory data during read miss    if read = '1' then      for i in 0 to DSETS-1 loop ddatainv(i) := mcdo.data; end loop;    end if;-- cache write signals    if twrite = '1' then      if tdiagwrite = '1' then ctwrite(ddset) := '1';      else ctwrite(conv_integer(setrepl)) := '1'; end if;    end if;    if M_EN then    if tpwrite = '1' then      if tdiagwrite = '1' then ctpwrite(ddset) := '1';      else ctpwrite(conv_integer(setrepl)) := '1'; end if;    end if;    end if;    if dwrite = '1' then      if ddiagwrite = '1' then cdwrite(ddset) := '1';      else cdwrite(conv_integer(setrepl)) := '1'; end if;    end if;          csnoopwe := (others => '0');    if ((snoopwe and not mcdo.scanen) = '1') then csnoopwe(snoopset) := '1'; end if;     if (r.flush and twrite) = '1' then   -- flush        ctwrite := (others => '1'); wlrr := (others => '0'); wlock := (others => '0');       if M_EN then         ctpwrite := (others => '1');       end if;              -- precise flush, ASI_FLUSH_PAGE & ASI_FLUSH_CTX       if false then                    --       if M_EN then        if r.pflush = '1' then          twrite := '0'; ctwrite := (others => '0');          for i in DSETS-1 downto 0 loop            wlrr(i) := dcramov.tag(i)(CTAG_LRRPOS);             wlock(i) := dcramov.tag(i)(CTAG_LOCKPOS);          end loop;          if r.pflushr = '0' then            for i in DSETS-1 downto 0 loop              pftag(OFFSET_HIGH downto OFFSET_LOW) := r.faddr;              pftag(TAG_HIGH downto TAG_LOW) := dcramov.tag(i)(TAG_HIGH downto TAG_LOW);              if ((pftag(VA_I_U downto VA_I_D) = r.pflushaddr(VA_I_U downto VA_I_D)) or                  (r.pflushtyp = '1')) then                ctwrite(i) := '1';                wlrr(i) := '0';                wlock(i) := '0';              end if;            end loop;          else            v.faddr := r.faddr;          end if;          v.pflushr := not r.pflushr;        end if;      end if;       end if;     end if;     if r.flush2 = '1' then      vl.lru := (others => (others => '0'));    end if;        -- reset    if rst = '0' then       v.dstate := idle; v.stpend  := '0'; v.req := '0'; v.burst := '0';      v.read := '0'; v.flush := '0'; v.nomds := '0'; v.holdn := '1';      v.rndcnt := (others => '0'); v.setrepl := (others => '0');      v.dsuset := (others => '0');      v.lrr := '0'; v.lock := '0'; v.flush2 := '1';      v.cctrl.dcs := "00"; v.cctrl.ics := "00";      v.cctrl.burst := '0'; v.cctrl.dsnoop := '0';      v.mmctrl1.e := '0'; v.mmctrl1.nf := '0'; v.mmctrl1.ctx := (others => '0');      v.mmctrl1.tlbdis := '0';      v.mmctrl1.pso := '0';      v.trans_op := '0';       v.flush_op := '0';       v.diag_op := '0';      v.pflush := '0';      v.pflushr := '0';      v.mmctrl1.bar := (others => '0');    end if;    if dsnoop = 0 then v.cctrl.dsnoop := '0'; end if;-- Drive signals    c <= v; cs <= vs;	ch <= vh; -- register inputs    cl <= vl;    -- tag ram inputs    senable := senable and not scanen; enable := enable and not scanen;    if mcdo.scanen = '1' then ctpwrite := (others => '0'); end if;    for i in 0 to DSETS-1 loop      tag(i)(dlinesize-1 downto 0) := vmask(i);      tag(i)(TAG_HIGH downto TAG_LOW) := newtag(TAG_HIGH downto TAG_LOW);      tag(i)(CTAG_LRRPOS) := wlrr(i);      tag(i)(CTAG_LOCKPOS) := wlock(i);      ctx(i) := r.mmctrl1.ctx;      ptag(i)(TAG_HIGH downto TAG_LOW) := newptag(TAG_HIGH downto TAG_LOW);    end loop;    dcrami.tag <= tag;    dcrami.ptag <= ptag;    dcrami.ctx <= ctx;    dcrami.tenable   <= enable;    dcrami.twrite    <= ctwrite;    dcrami.tpwrite   <= ctpwrite;    dcrami.flush    <= r.flush;    dcrami.senable <= senable; --vs.snoop or rs.snoop;    dcrami.swrite  <= csnoopwe;    dcrami.saddress(19 downto (OFFSET_HIGH - OFFSET_LOW +1)) <=     	zero32(19 downto (OFFSET_HIGH - OFFSET_LOW +1));    dcrami.saddress(OFFSET_HIGH - OFFSET_LOW downto 0) <= snoopaddr;    dcrami.stag(31 downto (TAG_HIGH - TAG_LOW +1)) <=    	zero32(31 downto (TAG_HIGH - TAG_LOW +1));    dcrami.stag(TAG_HIGH - TAG_LOW downto 0) <= rs.addr(TAG_HIGH downto TAG_LOW);    dcrami.tdiag <= mcdo.testen & "000";    dcrami.ddiag <= mcdo.testen & "000";    -- data ram inputs    dcrami.denable   <= enable;    dcrami.address(19 downto (OFFSET_HIGH - LINE_LOW + 1)) <= zero32(19 downto (OFFSET_HIGH - LINE_LOW + 1));    dcrami.address(OFFSET_HIGH - LINE_LOW downto 0) <= taddr;    dcrami.data <= ddatainv;    dcrami.dwrite    <= cdwrite;    -- memory controller inputs    mcdi.address  <= r.wb.addr;    mcdi.data     <= r.wb.data1;    mcdi.burst    <= r.burst;    mcdi.size     <= r.wb.size;    mcdi.read     <= r.wb.read;    mcdi.asi      <= r.wb.asi;    mcdi.lock     <= r.wb.lock;    mcdi.req      <= r.req;    mcdi.cache    <= orv(r.cctrl.dcs);    --mcdi.flush    <= r.flush;    -- diagnostic instruction cache access    dco.icdiag.flush  <= iflush;-- or mcdo.iflush;    dco.icdiag.pflush <= pflush;    dco.icdiag.pflushaddr <= pflushaddr;    dco.icdiag.pflushtyp <= pflushtyp;    dco.icdiag.read   <= read;    dco.icdiag.tag    <= (not r.asi(0));-- and (not r.asi(4));    dco.icdiag.ctx    <= r.asi(4); --ASI_ICTX "10101"    dco.icdiag.addr   <= r.xaddress;    dco.icdiag.enable <= r.icenable;    dco.icdiag.cctrl <= r.cctrl;    dco.icdiag.scanen  <= mcdo.scanen;       -- IU data cache inputs    dco.data  <= rdatav;    dco.mexc  <= mexc;    dco.set   <= conv_std_logic_vector(set, 2);    dco.hold  <= r.holdn;    dco.mds   <= mds;    dco.werr  <= mcdo.werr;    dco.idle  <= sidle and not r.stpend;    dco.scanen  <= mcdo.scanen;    dco.testen  <= mcdo.testen;        -- MMU    mmudci.trans_op <= mmudci_trans_op;        mmudci.transdata.data <= mmudci_transdata_data; --r.vaddr;    mmudci.transdata.su <= mmudci_su;    mmudci.transdata.read <= mmudci_read;    mmudci.transdata.isid <= id_dcache;    mmudci.transdata.wb_data <= dci.maddress;        mmudci.flush_op <= mmudci_flush_op;    mmudci.wb_op <= mmudci_wb_op;    mmudci.diag_op <= mmudci_diag_op;    mmudci.fsread <= mmudci_fsread;    mmudci.mmctrl1 <= r.mmctrl1;  end process;-- Local registers    reg1 : process(clk)    begin if rising_edge(clk ) then r <= c; end if; end process;      sn2 : if DSNOOP2 /= 0 generate      reg2 : process(sclk)      begin if rising_edge(sclk ) then rs <= cs; end if; end process;    end generate;      nosn2 : if DSNOOP2 = 0 generate      rs.snoop <= '0'; rs.writebp <= (others => '0');      rs.addr <= (others => '0'); rs.readbpx <= (others => '0');    end generate;      sn3 : if DSNOOP2 = 2 generate      reg3 : process(sclk)      begin if rising_edge(sclk ) then rh <= ch; end if; end process;    end generate;    sn3no : if DSNOOP2 /= 2 generate      rh.hit <= (others => (others => '0'));      rh.taddr <= (others => '0');      rh.set <= (others => '0');    end generate;    reg2 : if (DSETS>1) and (DCREPLACE = lru) generate      reg2 : process(clk)      begin if rising_edge(clk ) then rl <= cl; end if; end process;    end generate;       noreg2 : if (DSETS = 1) or (drepl /= lru) generate      rl.write <= '0'; rl.waddr <= (others => '0');      rl.set <= (others => '0'); rl.lru <= (others => (others => '0'));    end generate;       -- pragma translate_off  chk : process  begin    assert not ((DSETS > 2) and (DCREPLACE = lrr)) report	"Wrong data cache configuration detected: LRR replacement requires 2 sets"    severity failure;    wait;  end process;-- pragma translate_onend ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产天堂| 国产精品国产三级国产aⅴ入口| 欧美经典一区二区| 蜜桃久久久久久久| 欧美精品视频www在线观看| 中文字幕日本不卡| 91麻豆精品一区二区三区| 在线不卡中文字幕| 亚洲综合免费观看高清完整版 | 中文字幕一区二区三区不卡| 国产传媒欧美日韩成人| 国产精品久久午夜夜伦鲁鲁| 成人福利视频在线| 亚洲精品福利视频网站| 欧美影院一区二区| 亚洲国产精品99久久久久久久久| 亚洲欧美一区二区三区国产精品| 国产精品中文字幕日韩精品| 国产蜜臀97一区二区三区| 91视频www| 美女精品一区二区| 国产精品国产三级国产普通话蜜臀| 91婷婷韩国欧美一区二区| 亚洲一区二区三区中文字幕| 91精品国产综合久久精品图片| 美腿丝袜亚洲综合| 亚洲精品国产品国语在线app| 欧美日韩国产影片| 国产成人丝袜美腿| 亚欧色一区w666天堂| 日本一区二区三区dvd视频在线| 日本韩国视频一区二区| 日本一区二区三区在线不卡| 国产成人精品免费看| 国产精品久久久久影院老司| 一级日本不卡的影视| 91亚洲精品一区二区乱码| 精品国产青草久久久久福利| 大陆成人av片| 免费成人结看片| 亚洲国产乱码最新视频| 国产欧美一区二区在线| 欧美精品123区| 成人精品在线视频观看| 老司机精品视频线观看86| 亚洲激情图片一区| 国产亚洲欧美一级| 制服丝袜中文字幕一区| 91麻豆自制传媒国产之光| 国产资源在线一区| 经典三级一区二区| 免费在线观看成人| 亚洲自拍欧美精品| 一区二区三区.www| 国产欧美综合在线| 精品精品欲导航| 日韩美女天天操| 精品成人免费观看| 日韩欧美卡一卡二| 91精品国产一区二区人妖| 欧美日韩在线播放一区| 欧美在线观看你懂的| 色综合久久天天| 欧美日韩一卡二卡| 日韩三级av在线播放| 日韩一区二区三区电影在线观看 | 久久久91精品国产一区二区精品| 日韩一区二区三区免费观看| 91精品国产综合久久福利| 在线视频欧美区| 777a∨成人精品桃花网| 欧美一区二区在线免费播放| 日韩一区二区三| 26uuu色噜噜精品一区| 欧美激情中文字幕| 一区二区三区视频在线观看| 午夜不卡av在线| 国产黄人亚洲片| 91久久精品国产91性色tv| 日韩手机在线导航| 亚洲欧美日韩在线不卡| 日韩精品午夜视频| 国产精品一卡二卡在线观看| 99国内精品久久| 日韩一区二区三区视频在线| 国产性色一区二区| 亚洲专区一二三| 成人黄动漫网站免费app| 欧美日韩一级二级| 欧美国产精品一区二区三区| 亚洲观看高清完整版在线观看| 国产在线看一区| 一本到高清视频免费精品| 久久先锋影音av鲁色资源网| 亚洲小说春色综合另类电影| 东方欧美亚洲色图在线| 日韩亚洲欧美一区二区三区| 亚洲国产另类精品专区| 色噜噜狠狠色综合欧洲selulu| 久久网站最新地址| 麻豆成人免费电影| 制服丝袜亚洲播放| 亚洲1区2区3区视频| 不卡一区在线观看| 亚洲欧美自拍偷拍色图| 国产成人无遮挡在线视频| 久久久久久久久久久99999| 久久se精品一区二区| 欧美吞精做爰啪啪高潮| 综合在线观看色| 欧美视频一区二区在线观看| 亚洲午夜私人影院| 欧美日韩在线不卡| 老司机免费视频一区二区三区| 精品国精品国产| 成人免费毛片app| 一区二区三区日韩精品| 欧美一区二区三区免费大片| 国产精品一区久久久久| 亚洲视频一区在线观看| 欧美日韩中文一区| 国产一区二区三区香蕉| 亚洲精品久久久久久国产精华液| 中文字幕第一区| 欧美精品粉嫩高潮一区二区| 激情另类小说区图片区视频区| 国产日韩欧美一区二区三区综合| 99re免费视频精品全部| 久久福利资源站| 性久久久久久久| 中文一区一区三区高中清不卡| 欧美伊人精品成人久久综合97| 麻豆91在线观看| 亚洲线精品一区二区三区| 2欧美一区二区三区在线观看视频| 成人蜜臀av电影| 久久99精品视频| 一区二区在线免费观看| 久久久亚洲精华液精华液精华液 | 国产成人精品亚洲午夜麻豆| 亚洲成在线观看| 一区二区三区免费在线观看| 中文字幕免费观看一区| 精品国产麻豆免费人成网站| 91麻豆产精品久久久久久| 激情都市一区二区| 日韩激情一区二区| 亚洲影视资源网| 亚洲二区视频在线| 一区二区三区在线观看网站| 国产精品激情偷乱一区二区∴| 久久久精品综合| 国产夜色精品一区二区av| 久久免费电影网| 国产视频一区不卡| 国产女同性恋一区二区| 国产亚洲短视频| 成人欧美一区二区三区| 成人欧美一区二区三区小说| 一区在线观看免费| 亚洲一区成人在线| 国内精品写真在线观看| 成人a免费在线看| 在线中文字幕一区| 欧美一区二区女人| 久久综合九色综合欧美亚洲| 国产日韩欧美综合在线| 国产精品视频麻豆| 亚洲精品日日夜夜| 日韩一区欧美二区| 国产黄人亚洲片| 欧美区视频在线观看| 精品福利一区二区三区| 亚洲人成网站精品片在线观看| 亚洲国产精品尤物yw在线观看| 黄色成人免费在线| 一本久道中文字幕精品亚洲嫩| 欧美日韩亚洲国产综合| 亚洲麻豆国产自偷在线| 日本欧美一区二区| 91色porny在线视频| 精品免费99久久| 视频在线观看国产精品| 99精品偷自拍| 久久久久久亚洲综合影院红桃| 亚洲小说欧美激情另类| www.日韩av| 2021久久国产精品不只是精品| 1024成人网| 成人福利视频在线看| 久久久亚洲精品一区二区三区| 亚洲国产日韩一级| 99re成人在线| 国产精品卡一卡二卡三| 风间由美性色一区二区三区| 久久综合色天天久久综合图片| 美女性感视频久久| 精品乱人伦小说| 美女网站色91| 精品国产区一区|