3 (sys_clk_pin, /* 100Mhz */
5 fpga_0_RS232_Uart_1_ctsN_pin,
6 fpga_0_RS232_Uart_1_rtsN_pin,
7 fpga_0_RS232_Uart_1_sin_pin,
8 fpga_0_RS232_Uart_1_sout_pin,
48 fpga_0_LEDs_8Bit_GPIO_IO_pin
53 input fpga_0_RS232_Uart_1_ctsN_pin;
54 output fpga_0_RS232_Uart_1_rtsN_pin;
55 input fpga_0_RS232_Uart_1_sin_pin;
56 output fpga_0_RS232_Uart_1_sout_pin;
59 output ddr1_Clk_n_pin;
60 output [12:0] ddr1_Addr_pin;
61 output [1:0] ddr1_BankAddr_pin;
62 output ddr1_CAS_n_pin;
65 output ddr1_RAS_n_pin;
67 output [3:0] ddr1_DM_pin;
73 output ddr2_Clk_n_pin;
74 output [12:0] ddr2_Addr_pin;
75 output [1:0] ddr2_BankAddr_pin;
76 output ddr2_CAS_n_pin;
79 output ddr2_RAS_n_pin;
81 output [7:0] ddr2_DM_pin;
83 inout [7:0] ddr2_DQS_n;
86 wire [31:0] dram_addr;
90 wire [63:0] dram_write_data;
91 wire dram_write_data_push;
92 wire dram_write_data_full;
93 wire [63:0] dram_read_data;
94 wire dram_read_data_pop;
95 wire dram_read_data_empty;
96 wire [1:0] dram_read_data_latency;
99 wire [31:0] ddr2_addr;
103 wire [63:0] ddr2_write_data;
104 wire ddr2_write_data_push;
105 wire ddr2_write_data_full;
106 wire [63:0] ddr2_read_data;
107 wire ddr2_read_data_pop;
108 wire ddr2_read_data_empty;
109 wire [1:0] ddr2_read_data_latency;
129 wire vga_clk_unbuffered;
131 output [7:0] fpga_0_LEDs_8Bit_GPIO_IO_pin;
133 assign fpga_0_LEDs_8Bit_GPIO_IO_pin = ~leds;
135 assign leds[5:0] = dram_read_data[5:0];
136 assign leds[6] = dram_addr_r;
137 assign leds[7] = dram_addr_a;
139 BUFG GBUF_FOR_MUX_CLOCK (.I(clk_unbuffered), .O(clk));
145 .CLKIN_PERIOD("10 ns")
147 .CLKIN (sys_clk_pin),
149 .CLKFX (clk_unbuffered),
153 BUFG GBUF_FOR_VGA_CLOCK (.I(vga_clk_unbuffered), .O(vga_clk));
154 DCM // 25Mhz VGA clock
158 .CLKIN_PERIOD("20 ns")
160 .CLKIN (clk_unbuffered),
162 .CLKFX (vga_clk_unbuffered),
170 reg send_k; initial send_k = 0;
172 assign rst = sys_rst_pin;
174 wire data_to_host_full;
175 wire data_to_host_write_enable;
176 wire [7:0] data_to_host;
178 wire data_to_fleet_empty;
179 wire data_to_fleet_read_enable;
180 wire [7:0] data_to_fleet;
184 reg [7:0] data_to_host_r;
185 assign data_to_host = data_to_host_r;
189 initial ser_rst_r = 0;
190 assign ser_rst = (rst & ser_rst_r);
195 sasc_brg sasc_brg(sys_clk_pin, ser_rst, 8, 65, sio_ce, sio_ce_x4);
196 sasc_top sasc_top(clk, ser_rst,
197 fpga_0_RS232_Uart_1_sin_pin,
198 fpga_0_RS232_Uart_1_sout_pin,
199 fpga_0_RS232_Uart_1_ctsN_pin,
200 fpga_0_RS232_Uart_1_rtsN_pin,
205 data_to_fleet_read_enable,
206 data_to_host_write_enable,
212 // break and break_o are _active high_
213 always @(posedge clk) break_last <= break_o;
214 assign break = break_o && !break_last;
215 assign break_done = !break_o && break_last;
217 reg data_to_host_write_enable_reg;
218 reg data_to_fleet_read_enable_reg;
222 reg [7:0] root_in_d_reg;
227 wire [7:0] root_in_d;
228 wire [7:0] root_out_d;
231 * There is some very weird timing thing going on here; we need to
232 * hold reset low for more than one clock in order for it to propagate
233 * all the way to the docks.
235 root my_root(clk, rst && !break_o,
236 root_in_r, root_in_a, root_in_d,
237 root_out_r, root_out_a, root_out_d,
243 dram_write_data_push,
244 dram_write_data_full,
247 dram_read_data_empty,
248 dram_read_data_latency,
261 fifo4 my_root(clk, rst,
262 root_in_r, root_in_a, root_in_d,
263 root_out_r, root_out_a, data_to_host);
265 assign root_out_a = root_out_a_reg;
266 assign root_in_r = root_in_r_reg;
267 assign data_to_fleet_read_enable = data_to_fleet_read_enable_reg;
268 assign data_to_host_write_enable = data_to_host_write_enable_reg;
269 assign root_in_d = root_in_d_reg;
272 always @(posedge clk)
276 data_to_host_write_enable_reg <= 0;
278 end else if (break_done) begin
279 data_to_host_write_enable_reg <= 1;
280 data_to_host_r <= 111;
282 end else if (send_k) begin
283 data_to_host_write_enable_reg <= 1;
284 data_to_host_r <= 107;
288 end else if (root_out_r && !root_out_a_reg && !data_to_host_full) begin
289 data_to_host_write_enable_reg <= 1;
290 data_to_host_r <= root_out_d;
292 end else if (root_out_a_reg && !root_out_r) begin
293 data_to_host_write_enable_reg <= 0;
296 data_to_host_write_enable_reg <= 0;
301 always @(posedge clk)
307 data_to_fleet_read_enable_reg <= 0;
310 if (!data_to_fleet_empty && !root_in_r_reg && !root_in_a) begin
312 root_in_d_reg <= data_to_fleet;
313 data_to_fleet_read_enable_reg <= 1;
315 data_to_fleet_read_enable_reg <= 0;
327 data_to_fleet_read_enable_reg = 0;
328 data_to_host_write_enable_reg = 0;
333 .clk_freq( 50000000 ),
339 .ddr_a( ddr1_Addr_pin ),
340 .ddr_clk( ddr1_Clk_pin ),
341 .ddr_clk_n( ddr1_Clk_n_pin ),
342 .ddr_ba( ddr1_BankAddr_pin ),
344 .ddr_dm( ddr1_DM_pin ),
345 .ddr_dqs( ddr1_DQS ),
346 .ddr_cs_n( ddr1_CS_n_pin ),
347 .ddr_ras_n( ddr1_RAS_n_pin ),
348 .ddr_cas_n( ddr1_CAS_n_pin ),
349 .ddr_we_n( ddr1_WE_n_pin ),
350 .ddr_cke( ddr1_CE_pin ),
356 .fml_wr(!dram_isread && dram_addr_r),
357 .fml_done(dram_addr_a),
358 .fml_rd( dram_isread && dram_addr_r),
360 .fml_din(dram_write_data),
361 .fml_dout(dram_read_data),