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

📄 main_module.vhd

📁 描述:LED示范、按钮及开关、视频输出、键入、含Xilinx PicoBlaze微处理器的存储器模块
💻 VHD
📖 第 1 页 / 共 2 页
字号:
	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 + -