- bugfix: added 'bufchg_irq_en' to registers

Committed on the Free edition of March Hare Software CVSNT Server.
Upgrade to CVS Suite for more features and support:
http://march-hare.com/cvsnt/


git-svn-id: http://moon:8086/svn/vhdl/trunk@643 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
2009-11-08 21:50:03 +00:00
parent 618e8b54b0
commit 444e7530e1
+18 -16
View File
@@ -124,10 +124,10 @@ architecture Behavioral of vga_frontend64 is
-- Bus master signals -- Bus master signals
constant MAX_REQUEST_CNT : natural := tsvga.ts_h.ncyc_scan*tsvga.ts_v.ncyc_scan; constant MAX_REQUEST_CNT : natural := tsvga.ts_h.ncyc_scan*tsvga.ts_v.ncyc_scan;
signal buf_chg : std_logic; signal bufchg : std_logic;
signal buf_chg_irq_en : std_logic; signal bufchg_irq_en : std_logic;
signal buf_chg_irq : std_logic; signal bufchg_flag : std_logic;
signal buf_chg_irq_ack : std_logic; signal bufchg_flag_ack : std_logic;
signal vga_mem_off_last : unsigned(31 downto 0); signal vga_mem_off_last : unsigned(31 downto 0);
signal vga_mem_off_curr : unsigned(31 downto 0); signal vga_mem_off_curr : unsigned(31 downto 0);
signal vga_mem_off_0 : unsigned(31 downto 0); signal vga_mem_off_0 : unsigned(31 downto 0);
@@ -148,17 +148,17 @@ architecture Behavioral of vga_frontend64 is
begin begin
INT_O <= buf_chg_irq;
proc_buf_chg_irq: proc_bufchg_irq:
process(CLK_I) process(CLK_I)
begin begin
if rising_edge(CLK_I) then if rising_edge(CLK_I) then
if RST_I = '1' or buf_chg_irq_ack = '1' then if RST_I = '1' or bufchg_flag_ack = '1' then
buf_chg_irq <= '0'; bufchg_flag <= '0';
elsif buf_chg = '1' then elsif bufchg = '1' then
buf_chg_irq <= buf_chg_irq_en and vga_master_en; bufchg_flag <= vga_master_en;
end if; end if;
INT_O <= bufchg_flag and bufchg_irq_en;
end if; end if;
end process; end process;
@@ -352,7 +352,7 @@ pixel_counter:
variable last : unsigned(31 downto 0); variable last : unsigned(31 downto 0);
begin begin
if rising_edge(CLK_I) then if rising_edge(CLK_I) then
buf_chg <= '0'; bufchg <= '0';
if pixel_cnt_rst = '1' then if pixel_cnt_rst = '1' then
pixel_cnt := 0; pixel_cnt := 0;
curr := vga_mem_off_0; curr := vga_mem_off_0;
@@ -364,7 +364,7 @@ pixel_counter:
pixel_cnt := 0; pixel_cnt := 0;
curr := vga_mem_off_last; curr := vga_mem_off_last;
last := vga_mem_off_curr; last := vga_mem_off_curr;
buf_chg <= '1'; bufchg <= '1';
end if; end if;
end if; end if;
vga_mem_off_curr <= curr; vga_mem_off_curr <= curr;
@@ -429,7 +429,8 @@ registers_read:
when "0000" => when "0000" =>
SDAT_O(0) <= cg_rdy; SDAT_O(0) <= cg_rdy;
SDAT_O(1) <= vga_master_en; SDAT_O(1) <= vga_master_en;
SDAT_O(2) <= buf_chg_irq; SDAT_O(2) <= bufchg_irq_en;
SDAT_O(3) <= bufchg_flag;
-- sys_vga_ascii 4 -- sys_vga_ascii 4
when "0001" => when "0001" =>
@@ -483,11 +484,11 @@ registers_write:
cg_posx_we <= '0'; cg_posx_we <= '0';
cg_clr_screen <= '0'; cg_clr_screen <= '0';
cg_clr_line <= '0'; cg_clr_line <= '0';
buf_chg_irq_ack <= '0'; bufchg_flag_ack <= '0';
if RST_I = '1' then if RST_I = '1' then
cg_din <= (others => '0'); cg_din <= (others => '0');
vga_master_en <= '0'; vga_master_en <= '0';
buf_chg_irq_en <= '0'; bufchg_irq_en <= '0';
vga_mem_off_0 <= X"40000000"; vga_mem_off_0 <= X"40000000";
vga_mem_off_1 <= X"40004000"; vga_mem_off_1 <= X"40004000";
cg_color <= (X"FF", X"FF", X"FF", X"FF"); cg_color <= (X"FF", X"FF", X"FF", X"FF");
@@ -497,7 +498,8 @@ registers_write:
-- sys_vga_ctrl 0 -- sys_vga_ctrl 0
when "0000" => when "0000" =>
vga_master_en <= SDAT_I(1); vga_master_en <= SDAT_I(1);
buf_chg_irq_ack <= SDAT_I(2); bufchg_irq_en <= SDAT_I(2);
bufchg_flag_ack <= SDAT_I(3);
cg_clr_screen <= SDAT_I(4); cg_clr_screen <= SDAT_I(4);
cg_clr_line <= SDAT_I(5); cg_clr_line <= SDAT_I(5);