FPGA Grafik

Demo Programm zum Zeichnen von Computergrafik mit dem TerasIC DE1 Demo-Board SW0 auf dem Board schaltet um zwischen funktionaler und gebufferter Grafik: Sourcecode Fred Feuerstein Auto: DE1_Default Sourcecode Auto V.2: DE1_Default_v2 Folgende Bilder zeigen die Phasen der Framebuffer-Linien Programmierung, basierend auf der Geradengleichung.

Diodengleichung

1. Graphische Lösung mit Octave: octave:1> x=0:10:800 octave:2> y1=(5000-x)/1000 octave:3> y2=1e-12*(exp(x/26)-1) octave:4> plot(x,y1) octave:5> hold on octave:6> plot(x,y2) octave:7> hold off octave:8> x=650:1:770 octave:9> y1=(5000-x)/1000 octave:10> y2=1e-12*(exp(x/26)-1) octave:11> plot(x,y1) octave:12> hold on octave:13> plot(x,y2) 2. Numerische Lösung in Tabellenkalkulation: Diodengleichung_Numerisch.odf 3. Fazit Wir operieren hier in einem exorbitant grossen Zahlenbereich, der jede 32-Bit-CPU überlaufen lässt. […]

PWM

Für ein 16Bit/48kHz PWM wird ein Takt von 2^16*48kHz=3.146 GHz benötigt. Dieser kann noch halbiert werden, da bei der steigenden und fallenden Flanke der PWM-Zähler hochgezählt werden kann. Auf unserem Board DE0-Nano stehen uns lediglich 50 MHz zur Verfügung. Diese können mit der PLL auf ca. 500MHz hochgetaktet werden. Wir müssen also bei der Bitbreite […]

FPGA-Synth

In diesem Projekt versuchen wir, einen Musiksynthesizer auf FPGA zu realisieren. Ein Synthesizer besteht in der Regel aus Oszilatoren, Hüllkurvengeneratoren, Filtern, Modulationsmatrix, einem Mixer und einer Steuerung bzw. einem Sequenzer. Auf mehrstimmigkeit wollen wir vorerst verzichten. Diese Komponenten werden digital simuliert und anschliessend in ein Analogsignal konvertiert (DAC). Damit wir keine zusätzliche Hardware entwickeln müssen, […]

Pipeline

always @(posedge or negedge) if (posedge) Initialisierungsdaten pro pipeline-kanal: reg [2:0] posedge_counter; reg [2:0] negedge_counter; reg program_status1; reg program_status2; reg daten_status1; reg daten_status2; 1. posedge: prefetch – Instruction -> Hilfsregister – PC++ – posedge_counter++ 1. negedge: fetch – kopieren in INSTRUCTION-Register

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 […]

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 […]

CPU mit Pipeline

Im Folgenden ein Ansatz für eine CPU mit Pipeline in Verilog. Im beispiel, dass 8 mal inkrementieren sollte, sehen wir schön, dass in einer Pipeline Operationen, deren Argumente von einer vorhergehenden Operation abhängt, nicht dicht aufeinander folgen dürfen. Denn zum Zeitpunkt des ladens der Argumente steht das Resultat nicht zur Verfügung. Daher zählt das vorliegende […]

Wie verbinde ich Ports mit verschiedenen Breiten?

Error: Width mismatch in port “wraddress[9..0]” of instance “inst1” and type ex3_lpm_ram_dp_0 — source is “”DATA_ADR_WR[15..0]” (ID EX2_CPU_PIPELINE:inst)” Error: Width mismatch in port “rdaddress[9..0]” of instance “inst1” and type ex3_lpm_ram_dp_0 — source is “”DATA_ADR[15..0]” (ID EX2_CPU_PIPELINE:inst)” Antwort: Mit benannten Verbindungen (—X). z.B. DATA_ADR[15..0] |—-X DATA_ADR[15..0] DATA_ADR[9..0] X—-| rdaddress[9..0]