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

📄 ecp2_misc.vhd

📁 porting scintilla to qt
💻 VHD
📖 第 1 页 / 共 5 页
字号:
           ELSE              clka_valid <= '0';           END IF;        END IF;     END IF;  END PROCESS;   P108 : PROCESS(clkb_ipd)  BEGIN     IF (clkb_ipd'event and clkb_ipd = '1') THEN        IF ((g_reset = '0') or (rstb_ipd = '1')) THEN           clkb_valid <= '0';        ELSE           IF (ceb_ipd = '1') THEN              IF (csb_en = '1') THEN                  clkb_valid <= '1', '0' after 0.2 ns;              ELSE                 clkb_valid <= '0';              END IF;           ELSE              clkb_valid <= '0';           END IF;        END IF;     END IF;  END PROCESS;  clka_valid1 <= clka_valid;  clkb_valid1 <= clkb_valid;  last_clka_valid1 <= clka_valid1;  last_clkb_valid1 <= clkb_valid1;  P7 : PROCESS(g_reset, rsta_ipd, rstb_ipd, clka_ipd, clkb_ipd)  BEGIN     IF (g_reset = '0') THEN        dia_reg <= (others => '0');        diab_reg <= (others => '0');        ada_reg <= (others => '0');        bwa0_reg <= (others => '0');        bwa1_reg <= (others => '0');        wrena_reg <= '0';        rena_reg <= '0';     ELSIF (RESETMODE = "ASYNC") THEN        IF (rsta_ipd = '1') THEN           dia_reg <= (others => '0');           diab_reg <= (others => '0');           ada_reg <= (others => '0');           bwa0_reg <= (others => '0');           bwa1_reg <= (others => '0');           wrena_reg <= '0';           rena_reg <= '0';        ELSIF (clka_ipd'event and clka_ipd = '1') THEN           IF (cea_ipd = '1') THEN              dia_reg <= dia_node;              diab_reg <= diab_node;              ada_reg <= ada_node;              bwa0_reg <= (ada_ipd(1), ada_ipd(0));              bwa1_reg <= (ada_ipd(3), ada_ipd(2));              wrena_reg <= (wrea_ipd and csa_en);              rena_reg <= ((not wrea_ipd) and csa_en);           END IF;        END IF;     ELSIF (RESETMODE = "SYNC") THEN         IF (clka_ipd'event and clka_ipd = '1') THEN           IF (rsta_ipd = '1') THEN              dia_reg <= (others => '0');              diab_reg <= (others => '0');              ada_reg <= (others => '0');              bwa0_reg <= (others => '0');              bwa1_reg <= (others => '0');              wrena_reg <= '0';              rena_reg <= '0';           ELSIF (cea_ipd = '1') THEN              dia_reg <= dia_node;               diab_reg <= diab_node;               ada_reg <= ada_node;              bwa0_reg <= (ada_ipd(1), ada_ipd(0));              bwa1_reg <= (ada_ipd(3), ada_ipd(2));              wrena_reg <= (wrea_ipd and csa_en);              rena_reg <= ((not wrea_ipd) and csa_en);           END IF;        END IF;     END IF;     IF (g_reset = '0') THEN        dib_reg <= (others => '0');        adb_reg <= (others => '0');        bwb_reg <= (others => '0');        wrenb_reg <= '0';        renb_reg <= '0';     ELSIF (RESETMODE = "ASYNC") THEN        IF (rstb_ipd = '1') THEN           dib_reg <= (others => '0');           adb_reg <= (others => '0');           bwb_reg <= (others => '0');           wrenb_reg <= '0';           renb_reg <= '0';        ELSIF (clkb_ipd'event and clkb_ipd = '1') THEN           IF (ceb_ipd = '1') THEN              dib_reg <= dib_node;              adb_reg <= adb_node;              bwb_reg <= (adb_ipd(1), adb_ipd(0));              wrenb_reg <= (wreb_ipd and csb_en);              renb_reg <= ((not wreb_ipd) and csb_en);           END IF;        END IF;     ELSIF (RESETMODE = "SYNC") THEN        IF (clkb_ipd'event and clkb_ipd = '1') THEN           IF (rstb_ipd = '1') THEN              dib_reg <= (others => '0');              adb_reg <= (others => '0');              bwb_reg <= (others => '0');              wrenb_reg <= '0';              renb_reg <= '0';           ELSIF (ceb_ipd = '1') THEN              dib_reg <= dib_node;              adb_reg <= adb_node;              bwb_reg <= (adb_ipd(1), adb_ipd(0));              wrenb_reg <= (wreb_ipd and csb_en);              renb_reg <= ((not wreb_ipd) and csb_en);           END IF;        END IF;     END IF;  END PROCESS;-- Warning for collision  PW : PROCESS(ada_reg, adb_reg, wrena_reg, wrenb_reg, clka_valid, clkb_valid, rena_reg,        renb_reg)   VARIABLE WADDR_A_VALID : boolean := TRUE;  VARIABLE WADDR_B_VALID : boolean := TRUE;  VARIABLE ADDR_A : integer := 0;  VARIABLE ADDR_B : integer := 0;  VARIABLE DN_ADDR_A : integer := 0;  VARIABLE UP_ADDR_A : integer := 0;  VARIABLE DN_ADDR_B : integer := 0;  VARIABLE UP_ADDR_B : integer := 0;  BEGIN     WADDR_A_VALID := Valid_Address (ada_reg);     WADDR_B_VALID := Valid_Address (adb_reg);     IF (WADDR_A_VALID = TRUE) THEN        ADDR_A := conv_integer(ada_reg);     END IF;     IF (WADDR_B_VALID = TRUE) THEN        ADDR_B := conv_integer(adb_reg);     END IF;       --DN_ADDR_A := (ADDR_A * DATA_WIDTH_A);     --UP_ADDR_A := (((ADDR_A + 1) * DATA_WIDTH_A) - 1);     --DN_ADDR_B := (ADDR_B * DATA_WIDTH_B);     --UP_ADDR_B := (((ADDR_B + 1) * DATA_WIDTH_B) - 1);	  DN_ADDR_A := (ADDR_A * DATA_WIDTH_A) + (ADDR_A / div_a);	  UP_ADDR_A := DN_ADDR_A + (DATA_WIDTH_A - 1);	  DN_ADDR_B := (ADDR_B * DATA_WIDTH_B) + (ADDR_B / div_b);	  UP_ADDR_B := DN_ADDR_B + (DATA_WIDTH_B - 1);          IF (not((UP_ADDR_B < DN_ADDR_A) or (DN_ADDR_B > UP_ADDR_A))) THEN             IF (wr_a_wr_b_coll = '1') THEN                IF (clka_valid = '0' and clkb_valid = '0') THEN                   wr_a_wr_b_coll <= '0';                END IF;             END IF;          ELSE             wr_a_wr_b_coll <= '0';          END IF;          IF (not((UP_ADDR_B < DN_ADDR_A) or (DN_ADDR_B > UP_ADDR_A))) THEN             IF (wr_a_rd_b_coll = '1') THEN                IF (clka_valid = '0' and clkb_valid = '0') THEN                   wr_a_rd_b_coll <= '0';                END IF;             END IF;          ELSE             wr_a_rd_b_coll <= '0';          END IF;          IF (not((UP_ADDR_A < DN_ADDR_B) or (DN_ADDR_A > UP_ADDR_B))) THEN             IF (rd_a_wr_b_coll = '1') THEN                IF (clka_valid = '0' and clkb_valid = '0') THEN                   rd_a_wr_b_coll <= '0';                END IF;             END IF;          ELSE             rd_a_wr_b_coll <= '0';          END IF;	  if (not((UP_ADDR_B < DN_ADDR_A) or (DN_ADDR_B > UP_ADDR_A))) then		  if ((DN_ADDR_A > DN_ADDR_B) and (UP_ADDR_A < UP_ADDR_B)) then			  dn_coll_addr <= DN_ADDR_A;			  up_coll_addr <= UP_ADDR_A;		  elsif ((DN_ADDR_B > DN_ADDR_A) and (UP_ADDR_B < UP_ADDR_A)) then			  dn_coll_addr <= DN_ADDR_B;			  up_coll_addr <= UP_ADDR_B;		  elsif ((UP_ADDR_A - DN_ADDR_B) <= (UP_ADDR_B - DN_ADDR_A)) then			  dn_coll_addr <= DN_ADDR_B;			  up_coll_addr <= UP_ADDR_A;		  else			  dn_coll_addr <= DN_ADDR_A;			  up_coll_addr <= UP_ADDR_B;		  end if;	  end if;     IF ((wrena_reg = '1' and clka_valid = '1') and (wrenb_reg = '1' and clkb_valid = '1')) THEN         IF (not((UP_ADDR_B < DN_ADDR_A) or (DN_ADDR_B > UP_ADDR_A))) THEN--           assert false--           report " Write collision! Writing in the same memory location using Port A and Port B will cause the memory content invalid."--           severity warning;			  wr_a_wr_b_coll <= '1';        END IF;     END IF;     IF ((wrena_reg = '1' and clka_valid = '1') and (renb_reg = '1' and clkb_valid = '1')) THEN         IF (not((UP_ADDR_B < DN_ADDR_A) or (DN_ADDR_B > UP_ADDR_A))) THEN--           assert false--           report " Write/Read collision! Writing through Port A and reading through Port B from the same memory location may give wrong output."--           severity warning;			  wr_a_rd_b_coll <= '1';        END IF;     END IF;     IF ((rena_reg = '1' and clka_valid = '1') and (wrenb_reg = '1' and clkb_valid = '1')) THEN         IF (not((UP_ADDR_A < DN_ADDR_B) or (DN_ADDR_A > UP_ADDR_B))) THEN--           assert false--           report " Write/Read collision! Writing through Port B and reading through Port A from the same memory location may give wrong output."--           severity warning;			  rd_a_wr_b_coll <= '1';        END IF;     END IF;  END PROCESS;-- Writing to the memory  P8 : PROCESS(ada_reg, dia_reg, diab_reg, bwa0_reg, bwa1_reg, wrena_reg, dib_reg, adb_reg,               bwb_reg, wrenb_reg, clka_valid, clkb_valid,					wr_a_wr_b_coll)  VARIABLE WADDR_A_VALID : boolean := TRUE;  VARIABLE WADDR_B_VALID : boolean := TRUE;  VARIABLE WADDR_A : integer := 0;  VARIABLE WADDR_B : integer := 0;  VARIABLE dout_node_rbr : std_logic_vector(35 downto 0);  BEGIN     WADDR_A_VALID := Valid_Address (ada_reg);     WADDR_B_VALID := Valid_Address (adb_reg);     IF (WADDR_A_VALID = TRUE) THEN        WADDR_A := conv_integer(ada_reg);     END IF;     IF (WADDR_B_VALID = TRUE) THEN        WADDR_B := conv_integer(adb_reg);     END IF;         IF (DATA_WIDTH_A = 36) THEN        IF (wrena_reg = '1' and clka_valid = '1') THEN           FOR i IN 0 TO (DATA_WIDTH_A - 1) LOOP              dout_node_rbr(i) := MEM((WADDR_A * DATA_WIDTH_A) + i);           END LOOP;           doa_node_rbr <= dout_node_rbr(17 downto 0);           dob_node_rbr <= dout_node_rbr(35 downto 18);           IF (bwa0_reg(0) = '1') THEN              FOR i IN 0 TO 8 LOOP                 MEM((WADDR_A * DATA_WIDTH_A) + i) <= diab_reg(i);              END LOOP;           END IF;           IF (bwa0_reg(1) = '1') THEN              FOR i IN 0 TO 8 LOOP                 MEM((WADDR_A * DATA_WIDTH_A) + i + 9) <= diab_reg(i + 9);              END LOOP;           END IF;

⌨️ 快捷键说明

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