+ user_fifo test_fifo(
+ .WrFifo_Din( write_data ),
+ .WrFifo_WrEn( write_enable ),
+ .WrFifo_Full( write_full ),
+ .WrFifo_WrCnt( ),
+ .RdFifo_Dout( read_data ),
+ .RdFifo_RdEn( read_enable ),
+ .RdFifo_Empty( read_empty ),
+ .RdFifo_RdCnt( ),
+ .User_Rst( User_Rst ),
+ .User_Clk( clk ),
+ .Sys_Rst( User_Rst ),
+ .Sys_Clk( clk_fast ),
+ .D_I( D_I ),
+ .D_O( D_O ),
+ .D_T( D_T ),
+ .RDWR_B( RDWR_B ),
+ .CS_B( CS_B ),
+ .INIT_B( INIT_B ),
+ .CCLK( CCLK_int )
+ );
+
+ wire data_to_host_full;
+ reg [7:0] data_to_host;
+ wire data_to_fleet_empty;
+ wire [7:0] data_to_fleet;
+ reg data_to_host_write_enable;
+ reg data_to_fleet_read_enable;
+
+ assign data_to_fleet = read_data;
+ assign read_enable = data_to_fleet_read_enable;
+ assign write_enable = data_to_host_write_enable;
+ assign write_data = data_to_host;
+ assign data_to_fleet_empty = read_empty;
+ assign data_to_host_full = write_full;
+
+ initial data_to_fleet_read_enable = 1;
+ initial data_to_host_write_enable = 0;
+
+ reg [7:0] force_reset;
+ assign rst_out = User_Rst || (force_reset!=0);
+
+ /// Common //////////////////////////////////////////////////////////////////////////////
+
+ reg send_k;
+ initial send_k = 0;
+
+ reg [`WORDWIDTH-1:0] data_to_host_full_word;
+ reg [7:0] count_in;
+ reg [7:0] count_out;
+ reg [49:0] out_d;
+ assign out_d_ = out_d;
+
+ reg [16:0] credits;
+
+ // fpga -> host
+ always @(posedge clk) begin
+ if (/*rst_in*/User_Rst) begin
+ count_in <= 0;
+ count_out <= 0;
+ force_reset <= 0;
+ credits = 0;
+ `reset
+ end else begin
+
+ `cleanup
+
+ // fpga -> host
+ data_to_host_write_enable <= 0;
+ if (force_reset == 1) begin
+ force_reset <= 0;
+ data_to_host_write_enable <= 1;
+ credits = 0;
+ count_in <= 0;
+ count_out <= 0;
+ `reset
+ end else if (force_reset != 0) begin
+ force_reset <= force_reset-1;
+ end else if (count_out==0 && `in_full) begin
+ `drain_in
+ data_to_host_full_word <= in_d;
+ count_out <= 8;
+ end else if (count_out!=0 && !data_to_host_full && !data_to_host_write_enable && credits!=0) begin
+ data_to_host <= { 2'b0, data_to_host_full_word[5:0] };
+ data_to_host_full_word <= (data_to_host_full_word >> 6);
+ data_to_host_write_enable <= 1;
+ count_out <= count_out-1;
+ credits = credits - 1;
+ end
+
+ // host -> fpga
+ data_to_fleet_read_enable <= 0;
+ if (!data_to_fleet_empty && !data_to_fleet_read_enable) begin
+
+ // Note: if the switch fabric refuses to accept a new item,
+ // we can get deadlocked in a state where sending a reset
+ // code (2'b11) won't have any effect. Probably need to go
+ // back to using the break signal.
+
+ // command 0: data
+ if (data_to_fleet[7:6] == 2'b00 && `out_empty) begin
+ data_to_fleet_read_enable <= 1;
+ out_d <= { out_d[43:0], data_to_fleet[5:0] };
+ if (count_in==9) begin
+ count_in <= 0;
+ `fill_out
+ end else begin
+ count_in <= count_in+1;
+ end
+
+ // command 1: flow control credit
+ end else if (data_to_fleet[7:6] == 2'b01) begin
+ data_to_fleet_read_enable <= 1;
+ credits = credits + data_to_fleet[5:0];
+
+ // command 3: reset (and echo back reset code)
+ end else if (data_to_fleet[7:6] == 2'b11) begin
+ data_to_fleet_read_enable <= 1;
+ data_to_host <= data_to_fleet;
+ force_reset <= 255;
+
+ end
+
+ end
+
+ end
+ end
+
+
+== UCF:Bee2 =================================================================
+
+######################################
+## System clock pins
+######################################
+
+NET Clkin_p LOC = AP21 | IOSTANDARD = LVDS_25;
+NET Clkin_m LOC = AN21 | IOSTANDARD = LVDS_25;
+
+NET rst_in LOC = H4 | IOSTANDARD = LVCMOS18;
+
+NET clk_out PERIOD=50MHz;
+//NET clk_out PERIOD=100MHz;
+//NET clk_fast PERIOD=100MHz;
+NET Clkin_p PERIOD=100MHz;
+NET Clkin_m PERIOD=100MHz;
+
+######################################
+## SelectMAP interface pins
+######################################
+
+NET D<0> LOC = AU9 | IOSTANDARD = LVCMOS25;
+NET D<1> LOC = AV9 | IOSTANDARD = LVCMOS25;
+NET D<2> LOC = AY9 | IOSTANDARD = LVCMOS25;
+NET D<3> LOC = AW9 | IOSTANDARD = LVCMOS25;
+NET D<4> LOC = AW34 | IOSTANDARD = LVCMOS25;
+NET D<5> LOC = AY34 | IOSTANDARD = LVCMOS25;
+NET D<6> LOC = AV34 | IOSTANDARD = LVCMOS25;
+NET D<7> LOC = AU34 | IOSTANDARD = LVCMOS25;
+
+NET RDWR_B LOC = AR34 | IOSTANDARD = LVCMOS25;
+NET CS_B LOC = AT34 | IOSTANDARD = LVCMOS25;
+NET INIT_B LOC = AR9 | IOSTANDARD = LVCMOS25;
+NET CCLK LOC = C14 | IOSTANDARD = LVCMOS25;
+
+#Net rst_pin LOC=E9;
+#Net rst_pin PULLUP;
+#Net rst_pin TIG;
+
+== FPGA:ML509 ==============================================================