PROGRAMOZHATÓ LOGIKAI. Előadó: Dr. Oniga István

Hasonló dokumentumok
Digitális rendszerek tervezése FPGA áramkörökkel Verilog RTL kódolás

Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium

Dr. Oniga István DIGITÁLIS TECHNIKA 8

Laborgyakorlat 3 A modul ellenőrzése szimulációval. Dr. Oniga István

Dr. Oniga István DIGITÁLIS TECHNIKA 9

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

DIGITÁLIS TECHNIKA 7. Előadó: Dr. Oniga István

Xilinx 7-es sorozatú FPGA-k architektúrája

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

Kombinációs áramkörök modelezése Laborgyakorlat. Dr. Oniga István

Budapesti Műszaki és Gazdaságtudományi Egyetem. A Verilog HDL II. Nagy Gergely. Elektronikus Eszközök Tanszéke (BME) szeptember 26.

Attribútumok, constraint-ek

Előadó: Nagy István (A65)

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Előadó: Dr. Oniga István

Hardver leíró nyelvek (HDL)

FPGA áramkörök alkalmazásainak vizsgálata

Verilog HDL ismertető 4. hét : hét dia

Digitális technika (VIMIAA02) Laboratórium 4

PROTOTÍPUSKÉSZÍTÉS. Előadó: Dr. Oniga István

HDL nyelvek: VHDL. Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

Szántó Péter BME Méréstechnika és Információs Rendszerek Tanszék, FPGA Labor

Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium

A Picoblaze Core implementálása FPGA-ba

Szintézis attributumok és constraint-ek

Egyszerű RISC CPU tervezése

Hobbi Elektronika. A digitális elektronika alapjai: Újrakonfigurálható logikai eszközök

Digitális technika (VIMIAA02) Laboratórium 4

Járműfedélzeti rendszerek I. 4. előadás Dr. Bécsi Tamás

Hobbi Elektronika. A digitális elektronika alapjai: Sorrendi logikai áramkörök 3. rész

Digitális technika II. (vimia111) 5. gyakorlat: Tervezés adatstruktúra-vezérlés szétválasztással, vezérlőegység generációk

12. NYOMÓGOMBOK ÉS KAPCSOLÓK PERGÉSMENTESÍTÉSE A FEJLESZTŐLAPON

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

LOGIKAI TERVEZÉS PROGRAMOZHATÓ. Elő Előadó: Dr. Oniga István

Mérési jegyzőkönyv. az ötödik méréshez

7.hét: A sorrendi hálózatok elemei II.

Verilog HDL ismertető

Újrakonfigurálható eszközök

Újrakonfigurálható eszközök

Verilog ismertető (Szántó Péter, BME MIT, )

LOGSYS LOGSYS ECP2 FPGA KÁRTYA FELHASZNÁLÓI ÚTMUTATÓ szeptember 18. Verzió

Újrakonfigurálható eszközök

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

A Memory Interface Generator (MIG) beállítása a Logsys Kintex-7 FPGA kártyához

Constraint-ek. Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium

Hobbi Elektronika. A digitális elektronika alapjai: Sorrendi logikai áramkörök 2. rész

2008. október 9. Verzió

Dr. Oniga István DIGITÁLIS TECHNIKA 9

Mikrorendszerek tervezése

Digitális technika (VIMIAA01) Laboratórium 4

Digitális elektronika gyakorlat

Hobbi Elektronika. A digitális elektronika alapjai: Sorrendi logikai áramkörök 1. rész

11. KÓDÁTALAKÍTÓ TERVEZÉSE HÉTSZEGMENSES KIJELZŐHÖZ A FEJLESZTŐLAPON

FPGA & Verilog ismertetı. BME Méréstechnika és Információs Rendszerek Tanszék

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

LOGSYS LOGSYS SPARTAN-3E FPGA KÁRTYA FELHASZNÁLÓI ÚTMUTATÓ szeptember 19. Verzió

Újrakonfigurálható eszközök

ISE makró (saját alkatrész) készítése

Verilog HDL ismertető 2. hét : 1. hét dia

Digitális rendszerek tervezése FPGA áramkörökkel Szimuláció és verifikáció

Kiegészítő segédlet szinkron sorrendi hálózatok tervezéséhez

10. Digitális tároló áramkörök

A feladatokat önállóan, meg nem engedett segédeszközök használata nélkül oldottam meg: Olvasható aláírás:...

Mikrorendszerek tervezése

LOGSYS DIGITÁLIS VIDEO INTERFÉSZ MEGVALÓSÍTÁSA A LOGSYS KINTEX-7 FPGA KÁRTYÁVAL június 16. Verzió 1.0.

A MiniRISC processzor

Digitális technika VIMIAA hét

Digitális technika (VIMIAA02) Laboratórium 5

Digitális technika (VIMIAA02) Laboratórium 5

A Verilog HDL áttekintése

A LOGSYS GUI. Fehér Béla Raikovich Tamás, Laczkó Péter BME MIT FPGA laboratórium

Verilog HDL ismertető

10. EGYSZERŰ HÁLÓZATOK TERVEZÉSE A FEJLESZTŐLAPON Ennél a tervezésnél egy olyan hardvert hozunk létre, amely a Basys2 fejlesztőlap két bemeneti

Digitális rendszerek. Memória lapkák

Szimuláció és verifikáció. Digitális rendszerek tervezése FPGA áramkörökkel Szimuláció és verifikáció. Kétfajta szimulációs módszer

LOGSYS EGYSZERŰ ALKALMAZÁS KÉSZÍTÉSE A LOGSYS KINTEX-7 FPGA KÁRTYÁRA A XILINX VIVADO FEJLESZTŐI KÖRNYEZET HASZNÁLATÁVAL június 16. Verzió 1.

Digitális technika VIMIAA01 6. hét Fehér Béla BME MIT

Digitális technika VIMIAA02 6. EA

DIGITÁLIS TECHNIKA. Szabó Tamás Dr. Lovassy Rita - Tompos Péter. Óbudai Egyetem Kandó Kálmán Villamosmérnöki Kar LABÓRATÓRIUMI ÚTMUTATÓ

Digitális technika VIMIAA02 6. EA Fehér Béla BME MIT

DIGITÁLIS TECHNIKA 8 Dr Oniga. I stván István

Programmable Chip. System on a Chip. Lazányi János. Tartalom. A hagyományos technológia SoC / PSoC SoPC Fejlesztés menete Mi van az FPGA-ban?

Digitális technika (VIMIAA02) Laboratórium 3

HDL tervezés. Gábor Bata FPGA Developer Microwave Networks Ericsson Hungary Ltd.

Digitális technika (VIMIAA02) Laboratórium 3

Rendszertervezés FPGA eszközökkel

Újrakonfigurálható eszközök

Digitális technika II. (vimia111) 5. gyakorlat: Mikroprocesszoros tervezés, egyszerű feladatok HW és SW megvalósítása gépi szintű programozással

A Xilinx FPGA-k. A programozható logikákr. Az FPGA fejlesztés s menete. BMF KVK MAI, Molnár Zsolt, 2008.

Hobbi Elektronika. A digitális elektronika alapjai: További logikai műveletek

EB134 Komplex digitális áramkörök vizsgálata

Dr. Oniga István. DIGITÁLIS TECHNIKA 10 Memóriák

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Előadó: Dr. Oniga István

14. TARTALOM FUTTATÁSA A FEJLESZTŐLAP HÉTSZEGMENSES KIJELZŐJÉN

Xilinx ChipScope ismertető

Szűrő architektúrák FPGA realizációjának vizsgálata

A Számítógépek hardver elemei

DIGITÁLIS TECHNIKA 7-ik előadás

PAL és s GAL áramkörök

Átírás:

PROGRAMOZHATÓ LOGIKAI ESZKÖZÖK Előadó: Dr. Oniga István

Összeállította Dr. Oniga István A következő anyagok felhasználásával Digitális rendszerek tervezése FPGA áramkörökkel. Fehér Bela Szanto Peter, Lazanyi Janos, Raikovich Tamas (BME Merestechnika es Informacios Rendszerek Tanszek) Embedded Design using Programmable Gate Arrays. Dennis Silage Introduction ti to Verilog course. Xilinx Inc.

CLB LUT 16x1 bit ROM, RAM FPGA primitívek 16x1 bit shift regiszter MUXFi, MUXCY, XORCY BlockRAM 16384 bit dual port memória + paritás Paraméterezhető adatszélesség Hardver szorzó Aszinkron, szinkron (DSP48 blokk)

LUT ROM ROM (aszinkron!) HDL kód module rom16 (input [3:0] address, output reg [7:0] data); always @ (*) case(address) 4 b0000: data <= KONSTANS0; 4 b0001: data <= KONSTANS1; 4 b1111: data <= KONSTANS15; endcase endmodule Xilinx primitívek ROM16X1, ROM32x1,..

LUT RAM RAM: szinkron írás, aszinkron olvasás HDL kód module ram16 (input clk, we, input [3:0] addr, input [7:0] din, output [7:0] dout); reg [7:0] mem[15:0]; always @ (posedge clk) if (we) mem[addr] <= din; assign dout = mem[addr]; endmodule Xilinx primitívek Single port: RAM16X1S,.. Dual port: RAM16X1D,..

Olvasás: aszinkron LUT RAM időzítés Számlálóval l generált címzés CÍM 0 1 2 3 4 5 6 ADAT D0 D1 D2 D3 D4 D5 D6 Írás: szinkron Írás történik a bejelölt órajel felfutó éleknél CÍM 0 1 2 3 4 5 6 ADAT D0 D1 D2 D3 D4 D5 D6 WE

LUT shift regiszter HDL kód Shift regiszter module shr_16x1 (input clk, sh, din, input [3:0] addr, output dout); reg [15:0] shr; always @ (posedge clk) if (sh) shr <= {shr[14:0], din}; assign dout = shr[addr]; endmodule NINCS reset bemenet Xilinx primitívek SRLC16, SRLC16E

Shift regiszter tömb module shr_16x8 (input clk, sh, input [3:0] addr, input [7:0] din, output [7:0] dout); reg [7:0] shr[15:0]; integer i; always @ (posedge clk) if (sh) begin shr[0] <= din; for (i=15; i>0, i=i-1) begin shr[i] <= shr[i-1]; end end assign dout = shr[addr]; endmodule

BlockRAM Szinkron, dual port memória Méret: 16384 + 2048 (paritás) Adatszélesség: 1, 2, 4, 9, 18, 36 bit Portok: CLK, WE, EN, SSR (órajel, írás engedélyezés, engedélyezés, e és reset) ADDR, DI, DO (cím, adat be-, kimenet) Minden bemenet mintavételezett tt Kimenet az órajel felfutó élt követően kb. 2-3 ns Xilinx primitívek ití Single port: RAMB16_S1 RAMB16_S36 Dual port: RAMB16_S1_S1 RAMB16_S36_S36

Olvasás: szinkron BlockRAM időzítés Számlálóval l generált címzés CÍM 0 1 2 3 4 5 6 ADAT D0 D1 D2 D3 D4 D5 D6 Írás: szinkron Írás történik a bejelölt órajel felfutó éleknél CÍM 0 1 2 3 4 5 6 ADAT D0 D1 D2 D3 D4 D5 D6 WE

Írás-olvasás ütközés Írás alatt a BlockRAM adatkimenete (írási port) Nem változik (NO_ CHANGE) A régi adat kerül a kimenetre (READ_FIRST) Az éppen beírt adat kerül a kimenetre (WRITE_FIRST) Dual-port konfiguráció esetében ha a két port címe megegyezik, e és az egyiken írás történik, a másik adatkimenete érvénytelen (kivéve READ_FIRST mód) Mindkét porton azonos címre történő írás érvénytelenné teszi a beírt adatot

BlockRAM primitív RAMB16_S9 #(.INIT(9'h000) h000), // Value of output RAM registers at startup.srval(9'h000), // Output value upon SSR assertion.write_mode("write_first") ) RAMB16_S9_inst (.DO(DO), // 8-bit Data Output.DOP(DOP), // 1-bit parity Output.ADDR(ADDR), // 11-bit Address Input.CLK(CLK), // Clock.DI(DI), // 8-bit Data Input.DIP(DIP), // 1-bit parity Input.EN(EN), // RAM Enable Input.SSR(SSR), // Synchronous Set/Reset Input.WE(WE) // Write Enable Input );

SP BlockRAM Read First module sp_ram(input clk, input we, input en, input [10:0] addr, input [ 7:0] din, output [7:0] dout); reg [7:0] memory[2047:0]; reg [7:0] dout_reg; always @ (posedge clk) if (en) begin if (we) memory[addr] <= din; dout_reg <= memory[addr]; end assign dout = dout_reg; endmodule

SP BlockRAM Write First module sp_ram(input clk, input we, input en, input [10:0] addr, input [ 7:0] din, output [7:0] dout); reg [7:0] memory[2047:0]; reg [7:0] dout_reg; always @ (posedge clk) if (en) begin if (we) memory[addr] = din; dout_reg = memory[addr]; end assign dout = dout_reg; endmodule

SP BlockRAM No Change module sp_ram(input clk, input we, input en, input [10:0] addr, input [ 7:0] din, output [7:0] dout); reg [7:0] memory[2047:0]; reg [7:0] dout_reg; always @ (posedge clk) if (en) begin if (we) memory[addr] <= din; else dout_reg <= memory[addr]; end assign dout = dout_reg; endmodule

DP BlockRAM module dp_ram(input clk_a, we_a, en_a, clk_b, we_b, en_b, input [10:0] addr_a, addr_b, input [ 7:0] din_ a, din_ b, output [7:0] dout_ a, dout_ b); reg [7:0] memory[2047:0]; reg [7:0] dout_reg_a, dout_reg_b; always @ (posedge clk_a) if (en_a) begin if (we_a) memory[addr_a] <= din_a; dout_reg_a <= memory[addr_a]; end assign dout_a = dout_reg_a; always @ (posedge clk_b) if (en_b) begin if (we_b) memory[addr_b] <= din_b; dout_reg_b <= memory[addr_b]; end assign dout_b = dout_reg_b; endmodule

FIFO16 Virtex-4/5 primitív, nem adható meg HDL leírással FIFO18 #(.ALMOST_FULL_OFFSET(12'h080),.ALMOST_EMPTY_OFFSET(12'h080),.DATA_WIDTH(4),.DO_REG(1),.EN_SYN("FALSE"),.FIRST_WORD_FALL_THROUGH("FALSE") ) FIFO18_inst (.ALMOSTEMPTY(ALMOSTEMPTY),.ALMOSTFULL(ALMOSTFULL),.DO(DO),.DOP(DOP),.EMPTY(EMPTY),.FULL(FULL),.RDCOUNT(RDCOUNT),.RDERR(RDERR),.WRCOUNT(WRCOUNT),.WRERR(WRERR),.DI(DI),.DIP(DIP),.RDCLK(RDCLK),.RDEN(RDEN),.RST(RST),.WRCLK(WRCLK),.WREN(WREN));

HDL Kombinációs ió Szorzó: 18x18, előjeles module mul_c (input signed [17:0] a, b, output signed [35:0] p); assign p = a*b; endmodule Szinkron module mul_s (input clk, en, input signed [17:0] a, b, output t reg signed [35:0] p); always @ (posedge clk) if (en) p<=a*b; endmodule Xilinx primitívek MUL18X18, MUL18X18S

DSP blokk felépítése Virtex-5 DSP blokk

MAC module mac( input clk, rst, clr, input [17:0] a_in, b_in, output [47:0] res ); reg signed [17:0] a0, a1, b0, b1; reg signed [35:0] m; reg signed [47:0] p; always @ (posedge clk) if (rst) begin a0 <= 0; b0 <= 0; a1 <= 0; b1 <= 0; m <= 0; p <= 0; end else begin a0 <= a_in; b0 <= b_in; a1 <= a0; b1 <= b0; m <= a1*b1; if (clr) p <= m; else p <= p+m; end assign res = p; endmodule

HDL kapcsolási rajz MAC implementáció (1) clr clk a_in[17:0] [17:0] rst b_in[17:0] [17:0] [17:0] [17:0] [17:0] Q[17:0] D[17:0] Q[17:0] [17:0] R + - a0[17:0] a1[17:0] m_3[35:0] D[17:0] R D[17:0] R Q[17:0] [17:0] [17:0] D[17:0] R Q[17:0] [17:0] [17:0] [35:0] * D[35:0] [17:0] [35:0] R Q[35:0] [35:0] [17:0] m[35:0] [35:0] [47:0] + un7_p[47:0] [47:0] [35:0] [47:0] 0 [47:0] [47:0] D[47:0] Q[47:0] res[47:0] [47:0] [47:0] 1 R p_7[47:0] p[47:0] b0[17:0] b1[17:0]

MAC implementáció (2) Technológia kapcsolási rajz IBUF INV 0 0 1 1 1 1 1 1 1 1 0 0 0 [17:0] [17:0] 0*48 0*18 0*48 I O clr I O 00 clr_c_i clr_ibuf DSP48_2_2_D_0_0_0_1_0_1_0 SUBTRACT CARRYIN CLK CEA CEB CEC CEP CEM CECARRYIN CECTRL CECINSUB RSTA RSTB RSTC RSTP RSTM RSTCTRL RSTCARRYIN A[17:0] B[17:0] C[47:0] BCIN[17:0] PCIN[47:0] OPMODE[6:0] CARRYINSEL[1:0] p_7[47:0] BCOUT[17:0] P[47:0] PCOUT[47:0] [17:0] [47:0] [47:0]

Órajel kezelés bufferek Dedikált órajel terjesztő hálózat Külső ő forrás: IBUFG, IBUFGDS (automatikus, tik ha GCLK láb a forrás) Belső jel: BUFG Az órajel terjesztő hálózat (huzalozás, bufferek) száma véges -> lehető legkevesebb órajel használata BUFG használata BUFG BUFG_inst (.O(O), // Clock buffer output.i(i) () // Clock buffer input );

Digital Clock Manager Órajel kezelés DCM Fázis tolás Órajel osztás, szorzás (törttel) DCM DCM_inst (.CLK0(CLK0), // 0 degree DCM CLK output.clk180(clk180), // 180 degree DCM CLK output.clk270(clk270), // 270 degree DCM CLK output.clk2x(clk2x), // 2X DCM CLK output.clk2x180(clk2x180), // 2X, 180 degree DCM CLK out.clk90(clk90), // 90 degree DCM CLK output.clkdv(clkdv), // Divided DCM CLK out (CLKDV_DIVIDE).CLKFX(CLKFX), // DCM CLK synthesis out (M/D).CLKFX180(CLKFX180), // 180 degree CLK synthesis out.locked(locked), // DCM LOCK status output.psdone(psdone), // Dynamic phase adjust done output.status(status), // 8-bit DCM status bits output.clkfb(clkfb), // DCM clock feedback.clkin(clkin), // Clock input (from IBUFG, BUFG or DCM).PSCLK(PSCLK), // Dynamic phase adjust clock input.psen(psen), // Dynamic phase adjust enable input.psincdec(psincdec),.rst(rst) // DCM asynchronous reset input );

Órajel kezelés DCM paraméterek DCM paraméterezhető modul DCM #(.CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 // 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0.CLKFX_DIVIDE(1), // Can be any integer from 1 to 32.CLKFX_MULTIPLY(4), // Can be any integer from 2 to 32.CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature.clkin_period(0.0), // Specify period of input clock.clkout_phase_shift("none"), // Specify phase shift of NONE, FIXED or VARIABLE.CLK_FEEDBACK("1X"), // Specify clock feedback of NONE, 1X or 2X.DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS,.DFS_FREQUENCY_MODE("LOW"),.DLL_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for DLL.DUTY_CYCLE_CORRECTION("TRUE"), CORRECTION("TRUE") // Duty cycle correction, TRUE or FALSE.FACTORY_JF(16'hC080), // FACTORY JF values.phase_shift(0),.startup_wait("false") ) DCM_inst (.CLK0(CLK0), // 0 degree DCM CLK output.clk180(clk180), // 180 degree DCM CLK output );

Órajel kezelés DCM felhasználása DCM felhasználása Bemeneti és kimeneti órajelek terjesztő tő hálózaton CLK0 kimenet CLKFB-re visszacsatolva