VHDL Demo1

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity Demo is
	port 
	(
		Clk			: in std_logic;
		ResetN		: in std_logic;
		TasteN1		: in std_logic;
		Led			: out std_logic_vector(7 downto 0)
	);

end entity;

architecture Demo_Arch of Demo is

type states		is(Reset, LedOnLow, LedOnHigh, LedAllOn);
signal state		: states;
signal TasteN1_old	: std_logic;	-- flipflop

-- signal counter		: std_logic_vector(31 downto 0);


begin
	-- vergleich = und nicht ==	
	-- Led <= counter(31 downto 24);

	DemoP : process(ResetN, Clk) is
	begin
		if(ResetN = '0') then
			-- setze alle LED auf 1 bei reset
			Led <= (others => '0');
			state <= Reset;
			TasteN1_old <= '1';
			
			-- counter <= (others => '0');
		elsif(Clk'event and Clk = '1') then
			-- <= ist Zuweisung!
			-- 4mal weil 4 led
			-- Led(7 downto 4) <= TasteN1 & TasteN1 & TasteN1 & TasteN1;
			-- Led(3 downto 0) <= not(TasteN1 & TasteN1 & TasteN1 & TasteN1);
			-- counter <= counter + 1;
			
			TasteN1_old <= TasteN1;

			case state is
				when Reset =>
					Led <= (others => '0');
					if(TasteN1_old = '0' and TasteN1 = '1') then
						state <= LedOnLow;
					end if;
			
				when LedOnLow =>
					Led(7 downto 4) <= (others => '0');
					Led(3 downto 0) <= (others => '1');
					if(TasteN1_old = '0' and TasteN1 = '1') then
						state <= LedOnHigh;
					end if;
					
				when LedOnHigh =>
					Led(7 downto 4) <= (others => '1');
					Led(3 downto 0) <= (others => '0');
					if(TasteN1_old = '0' and TasteN1 = '1') then
						state <= LedAllOn;
					end if;
					
				when LedAllOn =>
					Led <= (others => '1');
					if(TasteN1_old = '0' and TasteN1 = '1') then
						state <= Reset;
					end if;
					
			end case;
			
		end if;
	end process DemoP;
	


end Demo_Arch;

FPGA Workshop

S-RAM based

22k Logic Cells

Lookup-Table, 16 in, FlopFlop, 1 out

Programmierbare Interconnection Points.

2 Programmiermethoden
- Struktural, auf Hardwareebene (1980)
- Verhaltensbasiert, Funktional (Verilog)

Programmiert wird:
- Lookup Table
- Startwert vom FlipFlop
- Interconnection points

Seither weiterentwicklung:
- RAM (512k) in 9k Blöcken
- PLLs, gut, wenig jitter
- Hardware Multiplier
- keine Divisionen: müssen sequentialisiert werden..

Unser Modell:
- 6 PLLs

Einsatzgebiet:
- Spezialanfertigung, wenn kein Baustein vorhanden ist, alternative zu Microcontroller, die mehr Paralellität ermöglicht
- neu auch: Bildcodierung
alternative ASIC (schneller, hohe Auflage günstiger, initialkosten 10 Mio)

VHDL vs. Verilog vs. System-Verilog

VHDL
- eher Softwareentwicklerbasiert
- Ministry of Defense

Verilog
- eher Elektrotechnikerbasiert
- Private Firma

New Project:
- Top Level Entity Name merken
- keine Files hinzufügen
- Devices herstellerübergreifend Kompatibel, unterschiede bezüglich Pinout
Arria: 15 Jahre alt
MAX: CPLD (fpga mit integriertem flash, früher auf)
FPGA: Flüchtig (braucht immer Programmierdevice)
Cyclone: Günstig, stromsparend
Stratix: HighEnd Serie, teuer, Grafikprozessorenprototypen

–> wir arbeiten mit Cyclone IV

VHDL an ADA angelehnt, extremst strongtypig (streng in der Verwendung der Datentypen)

Verilog an C angelegt

VHDL Datei Aufbau:

  • Libs
  • interface description “entity”
    Taste ->
    Led <-
  • Architecture
Flow:
  • Coding
  • Analysis & Synthesis
  • Compile
  • Pin Planer
  • TimeAnalyzer (TimeQuest Timing Analyzer, time constraints)
    • Create clock: Period 20 ns
  • Programmer
Konstrukt: Process für getaktete
Demo.qsf
set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V

ModelSim

New Project

Add File Demo_tb.vhd

entity Demo_tb is
 port
 (
 );
 end entity;

=> Verbindung (wire)

<= Zuweisung (reg)

Array: Datenstruktur

Vektor: Datantyp

Tools:
Compile
TimeQuest TimeAnalyzer
Create Timing Netlist
Constraints/Create clock
write sdc file
assignments/settings/../TimeQuest Time analyzer/sdc filename
compile