added v2.0
This commit is contained in:
BIN
06_IO_Devices/00_HACK/HACK.dia
Normal file
BIN
06_IO_Devices/00_HACK/HACK.dia
Normal file
Binary file not shown.
BIN
06_IO_Devices/00_HACK/HACK.png
Normal file
BIN
06_IO_Devices/00_HACK/HACK.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 100 KiB |
72
06_IO_Devices/00_HACK/HACK_tb.gtkw
Normal file
72
06_IO_Devices/00_HACK/HACK_tb.gtkw
Normal file
@@ -0,0 +1,72 @@
|
||||
[*]
|
||||
[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
|
||||
[*] Thu Dec 29 16:29:18 2022
|
||||
[*]
|
||||
[dumpfile] "/home/micha/gitlab/nand2tetris-fpga/06_IO_Devices/00_HACK/HACK_tb.vcd"
|
||||
[dumpfile_mtime] "Thu Dec 29 16:28:24 2022"
|
||||
[dumpfile_size] 83632917
|
||||
[savefile] "/home/micha/gitlab/nand2tetris-fpga/06_IO_Devices/00_HACK/HACK_tb.gtkw"
|
||||
[timestart] 281880000
|
||||
[size] 1920 963
|
||||
[pos] -1 -1
|
||||
*-24.000000 40600000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
|
||||
[treeopen] HACK_tb.
|
||||
[sst_width] 281
|
||||
[signals_width] 180
|
||||
[sst_expanded] 1
|
||||
[sst_vpaned_height] 259
|
||||
@200
|
||||
-GPIO
|
||||
@28
|
||||
HACK_tb.BUT[1:0]
|
||||
HACK_tb.LED[1:0]
|
||||
@200
|
||||
-UART
|
||||
@28
|
||||
HACK_tb.UART_TX
|
||||
HACK_tb.UART_RX
|
||||
@200
|
||||
-SPI
|
||||
@28
|
||||
HACK_tb.SPI_CSX
|
||||
HACK_tb.SPI_SDI
|
||||
HACK_tb.SPI_SDO
|
||||
HACK_tb.SPI_SCK
|
||||
@200
|
||||
-SRAM
|
||||
@22
|
||||
HACK_tb.SRAM_ADDR[17:0]
|
||||
@28
|
||||
HACK_tb.SRAM_CSX
|
||||
HACK_tb.SRAM_OEX
|
||||
HACK_tb.SRAM_WEX
|
||||
@22
|
||||
HACK_tb.SRAM_DATA[15:0]
|
||||
@200
|
||||
-GO
|
||||
@28
|
||||
HACK_tb.HACK.loadGO
|
||||
@200
|
||||
-DEBUG
|
||||
@28
|
||||
HACK_tb.HACK.loadDEBUG0
|
||||
@820
|
||||
HACK_tb.HACK.outDEBUG0[15:0]
|
||||
@28
|
||||
HACK_tb.HACK.loadDEBUG1
|
||||
@24
|
||||
HACK_tb.HACK.outDEBUG1[15:0]
|
||||
@28
|
||||
HACK_tb.HACK.loadDEBUG2
|
||||
@24
|
||||
HACK_tb.HACK.outDEBUG2[15:0]
|
||||
@28
|
||||
HACK_tb.HACK.loadDEBUG3
|
||||
@24
|
||||
HACK_tb.HACK.outDEBUG3[15:0]
|
||||
@28
|
||||
HACK_tb.HACK.loadDEBUG4
|
||||
@24
|
||||
HACK_tb.HACK.outDEBUG4[15:0]
|
||||
[pattern_trace] 1
|
||||
[pattern_trace] 0
|
121
06_IO_Devices/00_HACK/HACK_tb.v
Normal file
121
06_IO_Devices/00_HACK/HACK_tb.v
Normal file
@@ -0,0 +1,121 @@
|
||||
`timescale 10ns/1ns
|
||||
`default_nettype none
|
||||
module HACK_tb();
|
||||
|
||||
// IN,OUT
|
||||
reg CLK = 1;
|
||||
reg [1:0] BUT = 3;
|
||||
wire [1:0] LED;
|
||||
wire UART_TX;
|
||||
wire UART_RX;
|
||||
wire SPI_SDO;
|
||||
wire SPI_SDI;
|
||||
wire SPI_SCK;
|
||||
wire SPI_CSX;
|
||||
wire [17:0] SRAM_ADDR;
|
||||
wire [15:0] SRAM_DATA;
|
||||
wire SRAM_WEX;
|
||||
wire SRAM_OEX;
|
||||
wire SRAM_CSX;
|
||||
wire LCD_DCX;
|
||||
wire LCD_SDO;
|
||||
wire LCD_SCK;
|
||||
wire LCD_CSX;
|
||||
reg RTP_SDI;
|
||||
wire RTP_SDO;
|
||||
wire RTP_SCK;
|
||||
|
||||
// Part
|
||||
HACK HACK(
|
||||
.CLK(CLK), // external clock 100 MHz
|
||||
.BUT(BUT), // user button ("pushed down" == 0) ("up" == 1)
|
||||
.LED(LED), // leds (0 off, 1 on)
|
||||
.UART_RX(UART_RX), // UART receive
|
||||
.UART_TX(UART_TX), // UART transmit
|
||||
.SPI_SDO(SPI_SDO), // SPI serial data out
|
||||
.SPI_SDI(SPI_SDI), // SPI serial data in
|
||||
.SPI_SCK(SPI_SCK), // SPI serial clock
|
||||
.SPI_CSX(SPI_CSX), // SPI chip select not
|
||||
.SRAM_ADDR(SRAM_ADDR), // SRAM address 18 Bit = 256K
|
||||
.SRAM_DATA(SRAM_DATA), // SRAM data 16 Bit
|
||||
.SRAM_WEX(SRAM_WEX), // SRAM write_enable_not
|
||||
.SRAM_OEX(SRAM_OEX), // SRAM output_enable_not
|
||||
.SRAM_CSX(SRAM_CSX), // SRAM chip_select_not
|
||||
.LCD_DCX(LCD_DCX), // LCD data/command not
|
||||
.LCD_SDO(LCD_SDO), // LCD serial data out
|
||||
.LCD_SCK(LCD_SCK), // LCD serial clock
|
||||
.LCD_CSX(LCD_CSX), // LCD chip select not
|
||||
.RTP_SDI(RTP_SDI), // RTP serial data in
|
||||
.RTP_SDO(RTP_SDO), // RTP serial data out in
|
||||
.RTP_SCK(RTP_SCK) // RTP serial clock
|
||||
);
|
||||
|
||||
// Simulate
|
||||
always #0.5 CLK = ~CLK;
|
||||
integer n=0;
|
||||
always @(posedge CLK) n=n+1;
|
||||
|
||||
// Compare
|
||||
reg [9:0] uart=10'b1111111111;
|
||||
reg [15:0] baudrate = 0;
|
||||
always @(posedge CLK)
|
||||
baudrate <= ((baudrate==866)?0:baudrate+1);
|
||||
always @(posedge CLK) begin
|
||||
uart <= (n==5000)?((82<<2)+1):(n==15000)?((88<<2)+1):((baudrate==866)?{1'b1,uart[9:1]}:uart);
|
||||
end
|
||||
wire shift = (baudrate==866);
|
||||
assign UART_RX = uart[0];
|
||||
|
||||
//Simulate SPI
|
||||
reg spi_sleep=1;
|
||||
reg [31:0] spi_cmd=0;
|
||||
reg [95:0] spi=0;
|
||||
assign SPI_SDI = (SPI_CSX | spi_sleep) ? 1'bz:spi[95];
|
||||
always @(posedge (SPI_SCK))
|
||||
spi <= {spi[95:0],1'b0};
|
||||
always @(posedge (SPI_SCK))
|
||||
spi_cmd <= {spi_cmd[30:0],SPI_SDO};
|
||||
always @(negedge (SPI_CSX))
|
||||
spi_cmd <= 0;
|
||||
always @(spi_cmd) begin
|
||||
if (spi_cmd==32'h000000AB) spi_sleep <= 0;
|
||||
if (spi_cmd==32'h000000B9) spi_sleep <= 1;
|
||||
if (spi_cmd==32'h03040000) spi <= "SPI! 123";
|
||||
if (spi_cmd==32'h03010000) spi <= 96'h1001_FC10_1000_E308_0000_EA87;
|
||||
end
|
||||
|
||||
//Simulate SRAM
|
||||
reg [16:0] sram[0:7];
|
||||
always @(posedge CLK)
|
||||
if (~SRAM_WEX&&SRAM_OEX&&~SRAM_CSX) sram[SRAM_ADDR] <= SRAM_DATA;
|
||||
assign SRAM_DATA = (~SRAM_CSX&&~SRAM_OEX)?sram[SRAM_ADDR]:16'bzzzzzzzzzzzzzzzz;
|
||||
//Simulate LCD
|
||||
reg [7:0] lcd_c;
|
||||
reg [15:0] lcd_d;
|
||||
always @(posedge LCD_SCK) begin
|
||||
lcd_c <= (~LCD_DCX)?{lcd_c[6:0],LCD_SDO}:lcd_c;
|
||||
lcd_d <= (LCD_DCX)?{lcd_d[6:0],LCD_SDO}:lcd_d;
|
||||
end
|
||||
always @(negedge LCD_CSX) begin
|
||||
lcd_c <= 0;
|
||||
lcd_d <= 0;
|
||||
end
|
||||
//simulate BUT
|
||||
always @(posedge CLK) begin
|
||||
if (n==10000) BUT<=0;
|
||||
if (n==20000) BUT<=1;
|
||||
if (n==30000) BUT<=2;
|
||||
end
|
||||
|
||||
initial begin
|
||||
$dumpfile("HACK_tb.vcd");
|
||||
$dumpvars(0, HACK_tb);
|
||||
|
||||
$display("------------------------");
|
||||
$display("Testbench: Hack");
|
||||
|
||||
#40000
|
||||
$finish;
|
||||
end
|
||||
|
||||
endmodule
|
49
06_IO_Devices/00_HACK/Include.v
Normal file
49
06_IO_Devices/00_HACK/Include.v
Normal file
@@ -0,0 +1,49 @@
|
||||
`include "../../01_Boolean_Logic/Nand.v"
|
||||
`include "../../01_Boolean_Logic/Not.v"
|
||||
`include "../../01_Boolean_Logic/Buffer.v"
|
||||
`include "../../01_Boolean_Logic/And.v"
|
||||
`include "../../01_Boolean_Logic/Or.v"
|
||||
`include "../../01_Boolean_Logic/Xor.v"
|
||||
`include "../../01_Boolean_Logic/Mux.v"
|
||||
`include "../../01_Boolean_Logic/DMux.v"
|
||||
`include "../../01_Boolean_Logic/Not16.v"
|
||||
`include "../../01_Boolean_Logic/Buffer16.v"
|
||||
`include "../../01_Boolean_Logic/And16.v"
|
||||
`include "../../01_Boolean_Logic/Or16.v"
|
||||
`include "../../01_Boolean_Logic/Mux16.v"
|
||||
`include "../../01_Boolean_Logic/Or8Way.v"
|
||||
`include "../../01_Boolean_Logic/Mux4Way16.v"
|
||||
`include "../../01_Boolean_Logic/Mux8Way16.v"
|
||||
`include "../../01_Boolean_Logic/DMux4Way.v"
|
||||
`include "../../01_Boolean_Logic/DMux8Way.v"
|
||||
|
||||
`include "../../02_Boolean_Arithmetic/HalfAdder.v"
|
||||
`include "../../02_Boolean_Arithmetic/FullAdder.v"
|
||||
`include "../../02_Boolean_Arithmetic/Add16.v"
|
||||
`include "../../02_Boolean_Arithmetic/Inc16.v"
|
||||
`include "../../02_Boolean_Arithmetic/ALU.v"
|
||||
|
||||
`include "../../03_Sequential_Logic/DFF.v"
|
||||
`include "../../03_Sequential_Logic/Bit.v"
|
||||
`include "../../03_Sequential_Logic/Register.v"
|
||||
`include "../../03_Sequential_Logic/PC.v"
|
||||
`include "../../03_Sequential_Logic/RAM256.v"
|
||||
`include "../../03_Sequential_Logic/RAM512.v"
|
||||
`include "../../03_Sequential_Logic/RAM3840.v"
|
||||
`include "../../03_Sequential_Logic/BitShift9R.v"
|
||||
`include "../../03_Sequential_Logic/BitShift8L.v"
|
||||
|
||||
`include "../../05_Computer_Architecture/CPU.v"
|
||||
`include "../../05_Computer_Architecture/Memory.v"
|
||||
`include "../../05_Computer_Architecture/ROM.v"
|
||||
`include "../../05_Computer_Architecture/Clock25_Reset20.v"
|
||||
|
||||
`include "../../06_IO_Devices/HACK.v"
|
||||
`include "../../06_IO_Devices/UartTX.v"
|
||||
`include "../../06_IO_Devices/UartRX.v"
|
||||
`include "../../06_IO_Devices/SPI.v"
|
||||
`include "../../06_IO_Devices/InOut.v"
|
||||
`include "../../06_IO_Devices/SRAM_D.v"
|
||||
`include "../../06_IO_Devices/GO.v"
|
||||
`include "../../06_IO_Devices/LCD.v"
|
||||
`include "../../06_IO_Devices/RTP.v"
|
3
06_IO_Devices/00_HACK/apio.ini
Normal file
3
06_IO_Devices/00_HACK/apio.ini
Normal file
@@ -0,0 +1,3 @@
|
||||
[env]
|
||||
board = iCE40-HX1K-EVB
|
||||
|
68
06_IO_Devices/00_HACK/iCE40HX1K-EVB.pcf
Normal file
68
06_IO_Devices/00_HACK/iCE40HX1K-EVB.pcf
Normal file
@@ -0,0 +1,68 @@
|
||||
# physical constrain file
|
||||
# assign io-pins to pin numbering of iCE40-HX1K on olimex board iCE40HX1K-EVB
|
||||
# compare to the schematic of the board and the datasheet of fpga
|
||||
|
||||
set_io CLK 15 # SYSCLOCK 100 MHz
|
||||
|
||||
set_io BUT[0] 41 # BUT1
|
||||
set_io BUT[1] 42 # BUT2
|
||||
|
||||
set_io LED[0] 40 # LED1
|
||||
set_io LED[1] 51 # LED2
|
||||
|
||||
set_io UART_RX 36 # PIO2_8/RxD connected to pin 3 of UEXT (PGM)
|
||||
set_io UART_TX 37 # PIO2_9/TxD connected to pin 4 of UEXT (PGM)
|
||||
|
||||
set_io SPI_SDO 45 # iCE40-SDO
|
||||
set_io SPI_SDI 46 # iCE40-SDI
|
||||
set_io SPI_SCK 48 # iCE40-SCK
|
||||
set_io SPI_CSX 49 # iCE40-SS_B
|
||||
|
||||
set_io SRAM_ADDR[0] 79 # SA0
|
||||
set_io SRAM_ADDR[1] 80 # SA1
|
||||
set_io SRAM_ADDR[2] 81 # SA2
|
||||
set_io SRAM_ADDR[3] 82 # SA3
|
||||
set_io SRAM_ADDR[4] 83 # SA4
|
||||
set_io SRAM_ADDR[5] 85 # SA5
|
||||
set_io SRAM_ADDR[6] 86 # SA6
|
||||
set_io SRAM_ADDR[7] 87 # SA7
|
||||
set_io SRAM_ADDR[8] 89 # SA8
|
||||
set_io SRAM_ADDR[9] 90 # SA9
|
||||
set_io SRAM_ADDR[10] 91 # SA10
|
||||
set_io SRAM_ADDR[11] 93 # SA11
|
||||
set_io SRAM_ADDR[12] 94 # SA12
|
||||
set_io SRAM_ADDR[13] 95 # SA13
|
||||
set_io SRAM_ADDR[14] 96 # SA14
|
||||
set_io SRAM_ADDR[15] 97 # SA15
|
||||
set_io SRAM_ADDR[16] 99 # SA16
|
||||
set_io SRAM_ADDR[17] 100 # SA17
|
||||
|
||||
set_io SRAM_CSX 78 # SRAM_#CS
|
||||
set_io SRAM_OEX 74 # SRAM_#OE
|
||||
set_io SRAM_WEX 73 # SRAM_#WE
|
||||
|
||||
set_io SRAM_DATA[0] 62 # SD0
|
||||
set_io SRAM_DATA[1] 63 # SD1
|
||||
set_io SRAM_DATA[2] 64 # SD2
|
||||
set_io SRAM_DATA[3] 65 # SD3
|
||||
set_io SRAM_DATA[4] 66 # SD4
|
||||
set_io SRAM_DATA[5] 68 # SD5
|
||||
set_io SRAM_DATA[6] 69 # SD6
|
||||
set_io SRAM_DATA[7] 71 # SD7
|
||||
set_io SRAM_DATA[8] 72 # SD8
|
||||
set_io SRAM_DATA[9] 60 # SD9
|
||||
set_io SRAM_DATA[10] 59 # SD10
|
||||
set_io SRAM_DATA[11] 57 # SD11
|
||||
set_io SRAM_DATA[12] 56 # SD12
|
||||
set_io SRAM_DATA[13] 54 # SD13
|
||||
set_io SRAM_DATA[14] 53 # SD14
|
||||
set_io SRAM_DATA[15] 52 # SD15
|
||||
|
||||
set_io LCD_DCX 1 # PIO3_1A connected to pin 5 of GPIO1
|
||||
set_io LCD_SDO 2 # PIO3_1B connected to pin 7 of GPIO1
|
||||
set_io LCD_SCK 3 # PIO3_2A connected to pin 9 of GPIO1
|
||||
set_io LCD_CSX 4 # PIO3_2B connected to pin 11 of GPIO1
|
||||
|
||||
set_io RTP_SDI 7 # PIO3_3A connected to pin 13 of GPIO1
|
||||
set_io RTP_SDO 8 # PIO3_3B connected to pin 15 of GPIO1
|
||||
set_io RTP_SCK 9 # PIO3_5A connected to pin 17 of GPIO1
|
Reference in New Issue
Block a user