initial
This commit is contained in:
commit
d29e666c5b
21
.gitignore
vendored
Normal file
21
.gitignore
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
*.log
|
||||
*.txt
|
||||
*.id
|
||||
*.net
|
||||
*.pathes
|
||||
*.pos
|
||||
*.refcomp
|
||||
*.refparam
|
||||
*.refwire
|
||||
*.cdf
|
||||
*.cfg
|
||||
*.cfg.bit
|
||||
*.pin
|
||||
*.place
|
||||
*.sdf
|
||||
*.used
|
||||
*.prn
|
||||
|
||||
|
||||
net/*.v
|
||||
top_00.v
|
25
Makefile
Normal file
25
Makefile
Normal file
@ -0,0 +1,25 @@
|
||||
LIB = /home/bilbo/cc-toolchain-linux
|
||||
|
||||
YOSYS = $(LIB)/bin/yosys/yosys
|
||||
PR = $(LIB)/bin/p_r/p_r
|
||||
OFL = $(LIB)/../openFPGALoader/build/openFPGALoader
|
||||
|
||||
GTKW = gtkwave
|
||||
IVL = iverilog
|
||||
VVP = vvp
|
||||
IVLFLAGS = -g2012 -gspecify -Ttyp
|
||||
GHDL = ghdl
|
||||
|
||||
VLOG_SRC = $(shell find ./src -type f \( -iname \*.v -o -iname \*.sv \))
|
||||
|
||||
TOP = top
|
||||
PRFLAGS = -uCIO -ccf src/$(TOP).ccf -cCP
|
||||
|
||||
synth_vlog: $(VLOG_SRC)
|
||||
$(YOSYS) -qql log/synth.log -p 'read_verilog -sv $^; synth_gatemate -top $(TOP) -nomx8 -vlog net/$(TOP)_synth.v'
|
||||
|
||||
impl:
|
||||
$(PR) -i net/$(TOP)_synth.v -o $(TOP) $(PRFLAGS) > log/$@.log
|
||||
|
||||
prog:
|
||||
$(OFL) -c dirtyJtag $(TOP)_00.cfg.bit
|
0
log/.empty
Normal file
0
log/.empty
Normal file
0
net/.empty
Normal file
0
net/.empty
Normal file
72
src/top.ccf
Normal file
72
src/top.ccf
Normal file
@ -0,0 +1,72 @@
|
||||
Net "G2_MDMCSN" Loc = "IO_NA_A0";
|
||||
Net "G2_IRMDMIN" Loc = "IO_NA_B0";
|
||||
Net "G2_RQDEVN" Loc = "IO_NA_A1";
|
||||
Net "G2_RQEX1N" Loc = "IO_NA_B1";
|
||||
Net "G2_RQEX0N" Loc = "IO_NA_A2";
|
||||
Net "G2_IREXTN" Loc = "IO_NA_A3";
|
||||
|
||||
Net "G2_BLN" Loc = "IO_NA_B2";
|
||||
Net "G2_STN" Loc = "IO_NA_A4";
|
||||
Net "G2_BHN" Loc = "IO_NA_B3";
|
||||
Net "G2_DSN" Loc = "IO_NA_B4";
|
||||
Net "G2_FRN" Loc = "IO_NA_A5";
|
||||
Net "G2_TRN" Loc = "IO_NA_B5";
|
||||
|
||||
Net "G2_AD[15]" Loc = "IO_NA_A6";
|
||||
Net "G2_AD[14]" Loc = "IO_NA_A7";
|
||||
Net "G2_AD[13]" Loc = "IO_NB_A0";
|
||||
Net "G2_AD[12]" Loc = "IO_NB_B0";
|
||||
Net "G2_AD[11]" Loc = "IO_NB_A1";
|
||||
Net "G2_AD[10]" Loc = "IO_NB_B1";
|
||||
Net "G2_AD[9]" Loc = "IO_NB_A2";
|
||||
Net "G2_AD[8]" Loc = "IO_NB_B2";
|
||||
Net "G2_AD[7]" Loc = "IO_NB_A3";
|
||||
Net "G2_AD[6]" Loc = "IO_NB_B3";
|
||||
Net "G2_AD[5]" Loc = "IO_NB_A4";
|
||||
Net "G2_AD[4]" Loc = "IO_NB_B4";
|
||||
Net "G2_AD[3]" Loc = "IO_NB_A5";
|
||||
Net "G2_AD[2]" Loc = "IO_NB_B5";
|
||||
Net "G2_AD[1]" Loc = "IO_NB_A6";
|
||||
Net "G2_AD[0]" Loc = "IO_NB_B6";
|
||||
|
||||
Net "G_RST" Loc = "IO_NA_B8";
|
||||
Net "G2_CLK" Loc = "IO_NB_A8" | SCHMITT_TRIGGER=true;
|
||||
|
||||
Net "MIDIOUT" Loc = "IO_NA_B6";
|
||||
Net "MIDIIN" Loc = "IO_NA_B7";
|
||||
|
||||
Net "GND_NA_A8" Loc = "IO_NA_A8";
|
||||
|
||||
Net "GND_NB_B7" Loc = "IO_NB_B7";
|
||||
Net "GND_NB_B8" Loc = "IO_NB_B8";
|
||||
Net "GND_NB_A7" Loc = "IO_NB_A7";
|
||||
|
||||
Net "led" Loc = "IO_SB_B6";
|
||||
|
||||
# outputs
|
||||
|
||||
Net "PROBE_AD[15]" Loc = "IO_EB_B1";
|
||||
Net "PROBE_AD[14]" Loc = "IO_EB_B2";
|
||||
Net "PROBE_AD[13]" Loc = "IO_EB_B3";
|
||||
Net "PROBE_AD[12]" Loc = "IO_EB_B4";
|
||||
Net "PROBE_AD[11]" Loc = "IO_EB_B5";
|
||||
Net "PROBE_AD[10]" Loc = "IO_EB_B6";
|
||||
Net "PROBE_AD[9]" Loc = "IO_EB_B7";
|
||||
Net "PROBE_AD[8]" Loc = "IO_EB_B8";
|
||||
Net "PROBE_AD[7]" Loc = "IO_EB_A1";
|
||||
Net "PROBE_AD[6]" Loc = "IO_EB_A2";
|
||||
Net "PROBE_AD[5]" Loc = "IO_EB_A3";
|
||||
Net "PROBE_AD[4]" Loc = "IO_EB_A4";
|
||||
Net "PROBE_AD[3]" Loc = "IO_EB_A5";
|
||||
Net "PROBE_AD[2]" Loc = "IO_EB_A6";
|
||||
Net "PROBE_AD[1]" Loc = "IO_EB_A7";
|
||||
Net "PROBE_AD[0]" Loc = "IO_EB_A8";
|
||||
|
||||
Net "PROBE_BLN" Loc = "IO_EA_A8"; # 16
|
||||
Net "PROBE_STN" Loc = "IO_EA_B8"; # 17
|
||||
Net "PROBE_BHN" Loc = "IO_WB_A8"; # 18
|
||||
Net "PROBE_DSN" Loc = "IO_WB_B8"; # 19
|
||||
Net "PROBE_FRN" Loc = "IO_SB_B3"; # 20
|
||||
Net "PROBE_TRN" Loc = "IO_SB_A3"; # 21
|
||||
|
||||
Net "PROBE_CLK" Loc = "IO_SB_B2"; # 22
|
146
src/top.v
Normal file
146
src/top.v
Normal file
@ -0,0 +1,146 @@
|
||||
module top(
|
||||
input wire G2_MDMCSN,
|
||||
input wire G2_IRMDMIN,
|
||||
input wire G2_RQDEVN,
|
||||
input wire G2_RQEX1N,
|
||||
input wire G2_RQEX0N,
|
||||
input wire G2_IREXTN,
|
||||
|
||||
input wire G2_BLN,
|
||||
input wire G2_STN,
|
||||
input wire G2_BHN,
|
||||
output wire G2_DSN,
|
||||
input wire G2_FRN,
|
||||
input wire G2_TRN,
|
||||
|
||||
input wire [15:0] G2_AD,
|
||||
|
||||
input wire G_RST,
|
||||
input wire G2_CLK,
|
||||
|
||||
input wire MIDIOUT,
|
||||
input wire MIDIIN,
|
||||
|
||||
input wire GND_NA_A8,
|
||||
input wire GND_NB_B7,
|
||||
input wire GND_NB_B8,
|
||||
input wire GND_NB_A7,
|
||||
|
||||
output wire led,
|
||||
|
||||
output wire [15:0] PROBE_AD,
|
||||
|
||||
output wire PROBE_BLN,
|
||||
output wire PROBE_STN,
|
||||
output wire PROBE_BHN,
|
||||
output wire PROBE_DSN,
|
||||
output wire PROBE_FRN,
|
||||
output wire PROBE_TRN,
|
||||
|
||||
output wire PROBE_CLK
|
||||
|
||||
);
|
||||
|
||||
/* logic analyzer probes */
|
||||
|
||||
assign PROBE_AD = G2_AD;
|
||||
assign PROBE_BLN = G2_BLN;
|
||||
assign PROBE_STN = G2_STN;
|
||||
assign PROBE_BHN = G2_BHN;
|
||||
//assign PROBE_DSN = G2_DSN;
|
||||
assign PROBE_FRN = G2_FRN;
|
||||
assign PROBE_TRN = G2_TRN;
|
||||
|
||||
assign PROBE_CLK = G2_CLK;
|
||||
|
||||
//assign led = counter[25];
|
||||
|
||||
always_ff @(negedge G2_CLK)
|
||||
begin
|
||||
counter <= counter + 1'b1;
|
||||
end
|
||||
|
||||
/* begin G2 bus protocol implementation: */
|
||||
|
||||
reg [26:0] counter;
|
||||
|
||||
reg dsn = 1'b0;
|
||||
assign PROBE_DSN = dsn;
|
||||
assign G2_DSN = dsn;
|
||||
|
||||
reg last_frn = 1'b1;
|
||||
|
||||
reg led_on = 1'b1;
|
||||
assign led = led_on;
|
||||
|
||||
`define STATE_ADDRESS_LOW 2'd0
|
||||
`define STATE_ADDRESS_HIGH 2'd1
|
||||
`define STATE_DATA_LOW 2'd2
|
||||
`define STATE_DATA_HIGH 2'd3
|
||||
|
||||
reg [1:0] state = `STATE_ADDRESS_LOW;
|
||||
|
||||
reg [31:0] address;
|
||||
reg [31:0] data;
|
||||
|
||||
always_ff @(negedge G2_CLK)
|
||||
begin
|
||||
last_frn <= G2_FRN;
|
||||
end
|
||||
|
||||
always_ff @(negedge G2_CLK)
|
||||
begin
|
||||
if (last_frn & !G2_FRN)
|
||||
led_on <= !led_on;
|
||||
end
|
||||
|
||||
always_ff @(negedge G2_CLK)
|
||||
begin
|
||||
if (G2_FRN)
|
||||
dsn <= 1'b1;
|
||||
end
|
||||
|
||||
always_ff @(negedge G2_CLK)
|
||||
begin
|
||||
if (last_frn & !G2_FRN)
|
||||
begin
|
||||
if (!G2_BLN)
|
||||
begin
|
||||
/* we are only given 1 clock cycle to latch [15:0] of the
|
||||
address, so we need to latch G2_AD right now */
|
||||
/* this is a write operation */
|
||||
address[15:0] <= G2_AD;
|
||||
state <= `STATE_ADDRESS_HIGH;
|
||||
end
|
||||
else
|
||||
begin
|
||||
/* this is a read operation */
|
||||
state <= `STATE_ADDRESS_LOW;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always_ff @(negedge G2_CLK)
|
||||
begin
|
||||
if (!G2_FRN)
|
||||
if (state == `STATE_ADDRESS_LOW & !G2_BLN)
|
||||
begin
|
||||
address[15:0] <= G2_AD;
|
||||
state <= `STATE_ADDRESS_HIGH;
|
||||
end
|
||||
end
|
||||
|
||||
always_ff @(negedge G2_CLK)
|
||||
begin
|
||||
if (!G2_FRN)
|
||||
if (state == `STATE_ADDRESS_HIGH & !G2_BHN)
|
||||
begin
|
||||
address[31:16] <= G2_AD;
|
||||
state <= `STATE_DATA_LOW;
|
||||
/* signal that we are ready to receive the data */
|
||||
dsn <= 1'b0;
|
||||
led_on <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
Loading…
x
Reference in New Issue
Block a user