📄 main_module.vhd
字号:
RAM1_CS <= '0';
with port_id select MEM_WR <= write_strobe when X"3F", '0' when others;
MEM_DATA <= out_port when (write_strobe = '1') and (port_id = X"3F")
else "ZZZZZZZZ";
--process realizing the read ports. refer to the documentation for details
process ( read_strobe )
begin
if (read_strobe = '1') and (read_strobe'event) then
read_first_char_value <= '0';
case port_id is
when X"00" => in_port <= led_0_intensity;
when X"01" => in_port <= "0000000" & button_0_debounced;
when X"02" => in_port <= "000" & BUTTON_5_1;
when X"03" => in_port <= "0000000" & BUTTON_5_1(0);
when X"04" => in_port <= "0000000" & BUTTON_5_1(1);
when X"05" => in_port <= "0000000" & BUTTON_5_1(2);
when X"06" => in_port <= "0000000" & BUTTON_5_1(3);
when X"07" => in_port <= "0000000" & BUTTON_5_1(4);
when X"08" => in_port <= is_one_on( led_8_intensity ) & is_one_on( led_7_intensity ) &
is_one_on( led_6_intensity ) & is_one_on( led_5_intensity ) &
is_one_on( led_4_intensity ) & is_one_on( led_3_intensity ) &
is_one_on( led_2_intensity ) & is_one_on( led_1_intensity );
when X"09" => in_port <= led_1_intensity;
when X"0A" => in_port <= led_2_intensity;
when X"0B" => in_port <= led_3_intensity;
when X"0C" => in_port <= led_4_intensity;
when X"0D" => in_port <= led_5_intensity;
when X"0E" => in_port <= led_6_intensity;
when X"0F" => in_port <= led_7_intensity;
when X"10" => in_port <= led_8_intensity;
when X"11" => in_port <= SWITCH_8_1(7) & SWITCH_8_1(6) & SWITCH_8_1(5) &
SWITCH_8_1(4) & SWITCH_8_1(3) & SWITCH_8_1(2) & SWITCH_8_1(1) & SWITCH_8_1(0);
when X"12" => in_port <= "0000000" & SWITCH_8_1(0);
when X"13" => in_port <= "0000000" & SWITCH_8_1(1);
when X"14" => in_port <= "0000000" & SWITCH_8_1(2);
when X"15" => in_port <= "0000000" & SWITCH_8_1(3);
when X"16" => in_port <= "0000000" & SWITCH_8_1(4);
when X"17" => in_port <= "0000000" & SWITCH_8_1(5);
when X"18" => in_port <= "0000000" & SWITCH_8_1(6);
when X"19" => in_port <= "0000000" & SWITCH_8_1(7);
when X"1A" => in_port <= seg_0_data;
when X"1B" => in_port <= "0000" & led_to_hex(seg_0_data);
when X"1C" => in_port <= seg_0_intensity;
when X"1D" => in_port <= seg_1_data;
when X"1E" => in_port <= "0000" & led_to_hex(seg_1_data);
when X"1F" => in_port <= seg_1_intensity;
when X"20" => in_port <= seg_2_data;
when X"21" => in_port <= "0000" & led_to_hex(seg_2_data);
when X"22" => in_port <= seg_2_intensity;
when X"23" => in_port <= seg_3_data;
when X"24" => in_port <= "0000" & led_to_hex(seg_3_data);
when X"25" => in_port <= seg_3_intensity;
when X"26" => in_port <= led_to_hex(seg_1_data) & led_to_hex(seg_0_data);
when X"27" => in_port <= led_to_hex(seg_3_data) & led_to_hex(seg_2_data);
when X"28" => in_port <= first_char_index;
when X"29" => in_port <= first_free_index;
when X"2A" => in_port <= char_index;
when X"2B" => in_port <= char_data;
when X"2C" =>
in_port <= first_char_value;
read_first_char_value <= '1';
when X"2D" => in_port <= first_free_index - first_char_index;
when X"2E" => in_port <= FreqStep;
when X"2F" => in_port <= RealTurnoffCount;
when X"30" => in_port <= CharColumn;
when X"31" => in_port <= CharRow;
when X"32" => in_port <= CharCodeRead;
when X"33" => in_port <= CharAttributeRead;
when X"34" => in_port <= "00000" & CharAttributeRead(4 downto 2);
when X"35" => in_port <= "00000" & CharAttributeRead(7 downto 5);
when X"36" => in_port <= "0000000" & CharAttributeRead(1);
when X"37" => in_port <= "0000000" & CharAttributeRead(0);
when X"38" => in_port <= PaletteIndex;
when X"39" => in_port <= PaletteRead;
when X"3A" => in_port <= "000000" & PaletteRead(5 downto 4);
when X"3B" => in_port <= "000000" & PaletteRead(3 downto 2);
when X"3C" => in_port <= "000000" & PaletteRead(1 downto 0);
when X"3D" => in_port <= MemoryAddress0;
when X"3E" => in_port <= MemoryAddress1;
when X"3F" => in_port <= MEM_DATA;
when others => in_port <= ( others => '0' );
end case;
end if;
end process;
--process realizing the writing / reset
--refer to the documentation for the meaning of each port number
process ( write_strobe, button_0_debounced )
begin
if (button_0_debounced = '0') then
if (write_strobe = '1') and (write_strobe'event) then
interrupt <= '0';
CharWriteStrobe <= '0';
PaletteWriteStrobe <= '0';
case port_id is
when X"00" => led_0_intensity <= out_port;
when X"08" =>
led_8_intensity <= ( others => out_port(7) );
led_7_intensity <= ( others => out_port(6) );
led_6_intensity <= ( others => out_port(5) );
led_5_intensity <= ( others => out_port(4) );
led_4_intensity <= ( others => out_port(3) );
led_3_intensity <= ( others => out_port(2) );
led_2_intensity <= ( others => out_port(1) );
led_1_intensity <= ( others => out_port(0) );
when X"09" => led_1_intensity <= out_port;
when X"0A" => led_2_intensity <= out_port;
when X"0B" => led_3_intensity <= out_port;
when X"0C" => led_4_intensity <= out_port;
when X"0D" => led_5_intensity <= out_port;
when X"0E" => led_6_intensity <= out_port;
when X"0F" => led_7_intensity <= out_port;
when X"10" => led_8_intensity <= out_port;
when X"1A" => seg_0_data <= out_port;
when X"1B" => seg_0_data <= hex_to_led(out_port(3 downto 0));
when X"1C" => seg_0_intensity <= out_port;
when X"1D" => seg_1_data <= out_port;
when X"1E" => seg_1_data <= hex_to_led(out_port(3 downto 0));
when X"1F" => seg_1_intensity <= out_port;
when X"20" => seg_2_data <= out_port;
when X"21" => seg_2_data <= hex_to_led(out_port(3 downto 0));
when X"22" => seg_2_intensity <= out_port;
when X"23" => seg_3_data <= out_port;
when X"24" => seg_3_data <= hex_to_led(out_port(3 downto 0));
when X"25" => seg_3_intensity <= out_port;
when X"26" =>
seg_1_data <= hex_to_led(out_port(7 downto 4));
seg_0_data <= hex_to_led(out_port(3 downto 0));
when X"27" =>
seg_3_data <= hex_to_led(out_port(7 downto 4));
seg_2_data <= hex_to_led(out_port(3 downto 0));
when X"2A" => char_index <= out_port;
when X"2E" => FreqStep <= out_port;
when X"2F" => TurnOffCount <= out_port;
when X"30" => CharColumn <= out_port;
when X"31" => CharRow <= out_port;
when X"32" =>
CharCodeWrite <= out_port;
CharWriteStrobe <= '1';
when X"33" =>
CharAttributeWrite <= out_port;
CharWriteStrobe <= '1';
when X"34" =>
CharAttributeWrite(4 downto 2) <= out_port(2 downto 0);
CharWriteStrobe <= '1';
when X"35" =>
CharAttributeWrite(7 downto 5) <= out_port(2 downto 0);
CharWriteStrobe <= '1';
when X"36" =>
CharAttributeWrite(1) <= is_one_on(out_port);
CharWriteStrobe <= '1';
when X"37" =>
CharAttributeWrite(0) <= is_one_on(out_port);
CharWriteStrobe <= '1';
when X"38" => PaletteIndex <= out_port;
when X"39" =>
PaletteWrite <= out_port;
PaletteWriteStrobe <= '1';
when X"3A" =>
PaletteWrite(5 downto 4) <= out_port(1 downto 0);
PaletteWriteStrobe <= '1';
when X"3B" =>
PaletteWrite(3 downto 2) <= out_port(1 downto 0);
PaletteWriteStrobe <= '1';
when X"3C" =>
PaletteWrite(1 downto 0) <= out_port(1 downto 0);
PaletteWriteStrobe <= '1';
when X"3D" => MemoryAddress0 <= out_port;
when X"3E" => MemoryAddress1 <= out_port;
when others => interrupt <= '1';
end case;
end if;
else
--the reset part, where the default values are assigned
interrupt <= '0';
led_0_intensity <= (others => '0');
led_1_intensity <= (others => '0');
led_2_intensity <= (others => '0');
led_3_intensity <= (others => '0');
led_4_intensity <= (others => '0');
led_5_intensity <= (others => '0');
led_6_intensity <= (others => '0');
led_7_intensity <= (others => '0');
led_8_intensity <= (others => '0');
FreqStep <= (others => '0');
CharColumn <= (others => '0');
CharRow <= (others => '0');
PaletteIndex <= (others => '0');
MemoryAddress0 <= (others => '0');
MemoryAddress1 <= (others => '0');
seg_0_data <= (others => '0');
seg_0_intensity <= (others => '0');
seg_1_data <= (others => '0');
seg_1_intensity <= (others => '0');
seg_2_data <= (others => '0');
seg_2_intensity <= (others => '0');
seg_3_data <= (others => '0');
seg_3_intensity <= (others => '0');
end if;
end process;
kpcsm_clk <= CLK; --Left here to make the running of the microcontroller
--possible on a lower speed
LEDGATE <= '1'; --This controls all the leds (not the 7seg displays) at once
end Behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -