Basic bitstream synthesis OK for M1 except timing
authorlekernel <sebastien.bourdeauducq@lekernel.net>
Thu, 17 Jun 2010 22:15:56 +0000 (00:15 +0200)
committerlekernel <sebastien.bourdeauducq@lekernel.net>
Thu, 17 Jun 2010 22:15:56 +0000 (00:15 +0200)
boards/milkymist-one/rtl/setup.v
boards/milkymist-one/rtl/system.v
boards/milkymist-one/rtl/vga.v
boards/milkymist-one/sources.mak
boards/milkymist-one/synthesis/common.ucf
boards/milkymist-one/synthesis/system.xst

index 4b736cd..78f7994 100644 (file)
  * but when working on a specific part, it's very useful to be
  * able to cut down synthesis times.
  */
-
-//`define ENABLE_ISP1362
-//`define ENABLE_CFCARD
-/*
- * FIXME: clocks in AC97 and VGA are not handled correctly
- * and cause failure of ISE 11.2.
- */
 //`define ENABLE_AC97
-//`define ENABLE_VGA
 //`define ENABLE_PFPU
 //`define ENABLE_TMU
+//`define ENABLE_ETHERNET
+`define ENABLE_FMLMETER
 
 /*
  * System clock frequency in Hz.
  */
-`define CLOCK_FREQUENCY 80000000
+`define CLOCK_FREQUENCY 83333333
 
 /*
  * System clock period in ns (must be in sync with CLOCK_FREQUENCY).
  */
-`define CLOCK_PERIOD 12.5
+`define CLOCK_PERIOD 12
 
 /*
  * Default baudrate for the debug UART.
@@ -52,9 +46,9 @@
  * SDRAM depth, in bytes (the number of bits you need to address the whole
  * array with byte granularity)
  */
-`define SDRAM_DEPTH 26
+`define SDRAM_DEPTH 27
 
 /*
  * SDRAM column depth (the number of column address bits)
  */
-`define SDRAM_COLUMNDEPTH 9
+`define SDRAM_COLUMNDEPTH 10
index 540df04..07557af 100644 (file)
 `include "setup.v"
 
 module system(
-       input clkin,
-       input resetin,
+       input clk50,
        
        // Boot ROM
-       output [20:0] flash_adr,
-       input [7:0] flash_d,
-       output flash_byte_n,
+       output [23:0] flash_adr,
+       input [15:0] flash_d,
        output flash_oe_n,
        output flash_we_n,
-       output flash_ce,
-       output flash_ac97_reset_n,
+       output flash_ce_n,
+       output flash_rst_n,
+       input flash_sts,
 
        // UART
-       input uart_rxd,
-       output uart_txd,
+       input uart_rx,
+       output uart_tx,
 
-       // SD card
-       // TODO
+       // GPIO
+       input btn1,
+       input btn2,
+       input btn3,
+       output led1,
+       output led2,
 
        // DDR SDRAM
        output sdram_clk_p,
@@ -45,45 +48,93 @@ module system(
        output sdram_we_n,
        output sdram_cas_n,
        output sdram_ras_n,
-       output [3:0] sdram_dqm,
+       output [3:0] sdram_dm,
        output [12:0] sdram_adr,
        output [1:0] sdram_ba,
        inout [31:0] sdram_dq,
        inout [3:0] sdram_dqs,
-       
-       // GPIO
-       output [3:0] led,    // 2 GPIO OUT (2 LEDs for UART activity)
-       input [3:0] dipsw,   // 4 GPIO IN
 
        // VGA
        output vga_psave_n,
        output vga_hsync_n,
        output vga_vsync_n,
-       output vga_sync_n,
-       output vga_blank_n,
        output [7:0] vga_r,
        output [7:0] vga_g,
        output [7:0] vga_b,
-       output vga_clkout,
+       output vga_clk,
+       inout vga_sda,
+       output vga_sdc,
+
+       // Memory card
+       inout [3:0] mc_d,
+       inout mc_cmd,
+       output mc_clk,
        
        // AC97
        input ac97_clk,
        input ac97_sin,
        output ac97_sout,
-       output ac97_sync
-
-       // TODO
-       // ISP1362
+       output ac97_sync,
+       output ac97_rst_n,
+
+       // USB
+       output usba_spd,
+       output usba_oe_n,
+       input usba_rcv,
+       inout usba_vp,
+       inout usba_vm,
+
+       output usbb_spd,
+       output usbb_oe_n,
+       input usbb_rcv,
+       inout usbb_vp,
+       inout usbb_vm,
 
        // Ethernet
+       output phy_rst_n,
+       input phy_tx_clk,
+       output [3:0] phy_tx_data,
+       output phy_tx_en,
+       output phy_tx_er,
+       input phy_rx_clk,
+       input [3:0] phy_rx_data,
+       input phy_dv,
+       input phy_rx_er,
+       input phy_col,
+       input phy_crs,
+       input phy_irq_n,
+       output phy_mii_clk,
+       inout phy_mii_data,
+       output phy_clk,
 
        // Video Input
-
-       // DMX512
+       input [7:0] videoin_p,
+       input videoin_hs,
+       input videoin_vs,
+       input videoin_field,
+       input videoin_llc,
+       input videoin_irq_n,
+       input videoin_rst_n,
+       inout videoin_sda,
+       output videoin_sdc,
 
        // MIDI
+       output midi_tx,
+       input midi_rx,
+
+       // DMX512
+       input dmxa_r,
+       output dmxa_de,
+       output dmxa_d,
+       input dmxb_r,
+       output dmxb_de,
+       output dmxb_d,
 
        // IR
+       input ir_rx,
+
+       // Expansion connector
+       input [11:0] exp
 );
 
 //------------------------------------------------------------------
@@ -101,12 +152,12 @@ DCM_SP #(
        .CLKDV_DIVIDE(1.5),             // 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
 
        .CLKFX_DIVIDE(3),               // 1 to 32
-       .CLKFX_MULTIPLY(2),             // 2 to 32
+       .CLKFX_MULTIPLY(5),             // 2 to 32
 
        .CLKIN_DIVIDE_BY_2("FALSE"),
-       .CLKIN_PERIOD(`CLOCK_PERIOD),
+       .CLKIN_PERIOD(20.0),
        .CLKOUT_PHASE_SHIFT("NONE"),
-       .CLK_FEEDBACK("1X"),
+       .CLK_FEEDBACK("NONE"),
        .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
        .DFS_FREQUENCY_MODE("LOW"),
        .DLL_FREQUENCY_MODE("LOW"),
@@ -114,20 +165,20 @@ DCM_SP #(
        .PHASE_SHIFT(0),
        .STARTUP_WAIT("TRUE")
 ) clkgen_sys (
-       .CLK0(sys_clk_dcm),
+       .CLK0(),
        .CLK90(),
-       .CLK180(sys_clk_n_dcm),
+       .CLK180(),
        .CLK270(),
 
        .CLK2X(),
        .CLK2X180(),
 
        .CLKDV(),
-       .CLKFX(),
-       .CLKFX180(),
+       .CLKFX(sys_clk_dcm),
+       .CLKFX180(sys_clk_n_dcm),
        .LOCKED(),
-       .CLKFB(sys_clk),
-       .CLKIN(clkin),
+       .CLKFB(),
+       .CLKIN(clk50),
        .RST(1'b0),
        .PSEN(1'b0)
 );
@@ -144,13 +195,6 @@ assign sys_clk = clkin;
 assign sys_clk_n = ~clkin;
 `endif
 
-`ifndef SIMULATION
-/* Synchronize the reset input */
-reg rst0;
-reg rst1;
-always @(posedge sys_clk) rst0 <= resetin;
-always @(posedge sys_clk) rst1 <= rst0;
-
 /* Debounce it (counter holds reset for 10.49ms),
  * and generate power-on reset.
  */
@@ -159,7 +203,7 @@ reg sys_rst;
 initial rst_debounce <= 20'hFFFFF;
 initial sys_rst <= 1'b1;
 always @(posedge sys_clk) begin
-       if(rst1 | hard_reset)
+       if(hard_reset)
                rst_debounce <= 20'hFFFFF;
        else if(rst_debounce != 20'd0)
                rst_debounce <= rst_debounce - 20'd1;
@@ -181,21 +225,15 @@ end
 reg [7:0] flash_rstcounter;
 initial flash_rstcounter <= 8'd0;
 always @(posedge sys_clk) begin
-       if(~rst1 & ~sys_rst) /* ~sys_rst is for debouncing */
+       if(hard_reset)
                flash_rstcounter <= 8'd0;
        else if(~flash_rstcounter[7])
                flash_rstcounter <= flash_rstcounter + 8'd1;
 end
 
-assign flash_ac97_reset_n = flash_rstcounter[7];
-
-wire ac97_rst_n;
+assign flash_rst_n = flash_rstcounter[7];
 assign ac97_rst_n = flash_rstcounter[7];
-
-`else
-wire sys_rst;
-assign sys_rst = ~resetin;
-`endif
+assign phy_rst_n = flash_rstcounter[7];
 
 //------------------------------------------------------------------
 // Wishbone master wires
@@ -395,7 +433,9 @@ wire [31:0] csr_dr_uart,
                csr_dr_vga,
                csr_dr_ac97,
                csr_dr_pfpu,
-               csr_dr_tmu;
+               csr_dr_tmu,
+               csr_dr_ethernet,
+               csr_dr_fmlmeter;
 
 //------------------------------------------------------------------
 // FML master wires
@@ -403,11 +443,13 @@ wire [31:0]       csr_dr_uart,
 wire [`SDRAM_DEPTH-1:0]        fml_brg_adr,
                        fml_vga_adr,
                        fml_tmur_adr,
+                       fml_tmudr_adr,
                        fml_tmuw_adr;
 
 wire                   fml_brg_stb,
                        fml_vga_stb,
                        fml_tmur_stb,
+                       fml_tmudr_stb,
                        fml_tmuw_stb;
 
 wire                   fml_brg_we;
@@ -415,6 +457,7 @@ wire                        fml_brg_we;
 wire                   fml_brg_ack,
                        fml_vga_ack,
                        fml_tmur_ack,
+                       fml_tmudr_ack,
                        fml_tmuw_ack;
 
 wire [7:0]             fml_brg_sel,
@@ -425,7 +468,8 @@ wire [63:0]         fml_brg_dw,
 
 wire [63:0]            fml_brg_dr,
                        fml_vga_dr,
-                       fml_tmur_dr;
+                       fml_tmur_dr,
+                       fml_tmudr_dr;
 
 //------------------------------------------------------------------
 // FML slave wires, to memory controller
@@ -446,7 +490,7 @@ fmlarb #(
 ) fmlarb (
        .sys_clk(sys_clk),
        .sys_rst(sys_rst),
-       
+
        /* VGA framebuffer (high priority) */
        .m0_adr(fml_vga_adr),
        .m0_stb(fml_vga_stb),
@@ -455,7 +499,7 @@ fmlarb #(
        .m0_sel(8'bx),
        .m0_di(64'bx),
        .m0_do(fml_vga_dr),
-       
+
        /* WISHBONE bridge */
        .m1_adr(fml_brg_adr),
        .m1_stb(fml_brg_stb),
@@ -464,8 +508,8 @@ fmlarb #(
        .m1_sel(fml_brg_sel),
        .m1_di(fml_brg_dw),
        .m1_do(fml_brg_dr),
-       
-       /* TMU, pixel read DMA */
+
+       /* TMU, pixel read DMA (texture) */
        .m2_adr(fml_tmur_adr),
        .m2_stb(fml_tmur_stb),
        .m2_we(1'b0),
@@ -473,7 +517,7 @@ fmlarb #(
        .m2_sel(8'bx),
        .m2_di(64'bx),
        .m2_do(fml_tmur_dr),
-       
+
        /* TMU, pixel write DMA */
        .m3_adr(fml_tmuw_adr),
        .m3_stb(fml_tmuw_stb),
@@ -482,7 +526,16 @@ fmlarb #(
        .m3_sel(fml_tmuw_sel),
        .m3_di(fml_tmuw_dw),
        .m3_do(),
-       
+
+       /* TMU, pixel read DMA (destination) */
+       .m4_adr(fml_tmudr_adr),
+       .m4_stb(fml_tmudr_stb),
+       .m4_we(1'b0),
+       .m4_ack(fml_tmudr_ack),
+       .m4_sel(8'bx),
+       .m4_di(64'bx),
+       .m4_do(fml_tmudr_dr),
+
        .s_adr(fml_adr),
        .s_stb(fml_stb),
        .s_we(fml_we),
@@ -519,6 +572,8 @@ csrbrg csrbrg(
                |csr_dr_ac97
                |csr_dr_pfpu
                |csr_dr_tmu
+               |csr_dr_ethernet
+               |csr_dr_fmlmeter
        )
 );
 
@@ -621,7 +676,7 @@ lm32_top cpu(
 // Boot ROM
 //---------------------------------------------------------------------------
 norflash8 #(
-       .adr_width(21)
+       .adr_width(24)
 ) norflash (
        .sys_clk(sys_clk),
        .sys_rst(sys_rst),
@@ -634,13 +689,11 @@ norflash8 #(
        
        .flash_adr(flash_adr),
        .flash_d(flash_d)
-
 );
 
-assign flash_byte_n = 1'b0;
 assign flash_oe_n = 1'b0;
 assign flash_we_n = 1'b1;
-assign flash_ce = 1'b1;
+assign flash_ce_n = 1'b0;
 
 //---------------------------------------------------------------------------
 // UART
@@ -661,36 +714,10 @@ uart #(
        .rx_irq(uartrx_irq),
        .tx_irq(uarttx_irq),
        
-       .uart_rxd(uart_rxd),
-       .uart_txd(uart_txd)
+       .uart_rxd(uart_rx),
+       .uart_txd(uart_tx)
 );
 
-/* LED0 and LED1 are used as TX/RX indicators.
- * Generate long pulses so we have time to see them
- */
-reg [18:0] rxcounter;
-reg rxled;
-always @(posedge sys_clk) begin
-       if(~uart_rxd)
-               rxcounter <= {19{1'b1}};
-       else if(rxcounter != 19'd0)
-               rxcounter <= rxcounter - 19'd1;
-       rxled <= rxcounter != 19'd0;
-end
-
-reg [18:0] txcounter;
-reg txled;
-always @(posedge sys_clk) begin
-       if(~uart_txd)
-               txcounter <= {19{1'b1}};
-       else if(txcounter != 19'd0)
-               txcounter <= txcounter - 20'd1;
-       txled <= txcounter != 19'd0;
-end
-
-assign led[0] = txled;
-assign led[1] = rxled;
-
 //---------------------------------------------------------------------------
 // System Controller
 //---------------------------------------------------------------------------
@@ -699,7 +726,7 @@ wire [31:0] capabilities;
 
 sysctl #(
        .csr_addr(4'h1),
-       .ninputs(4),
+       .ninputs(3),
        .noutputs(2),
        .systemid(32'h4D4F4E45) /* MONE */
 ) sysctl (
@@ -715,8 +742,8 @@ sysctl #(
        .csr_di(csr_dw),
        .csr_do(csr_dr_sysctl),
 
-       .gpio_inputs(dipsw),
-       .gpio_outputs(led[3:2]), /* LED0 and LED1 are used as TX/RX indicators. */
+       .gpio_inputs({btn3, btn2, btn1}),
+       .gpio_outputs({led2, led1}),
 
        .capabilities(capabilities),
        .hard_reset(hard_reset)
@@ -756,7 +783,7 @@ ddram #(
        .sdram_we_n(sdram_we_n),
        .sdram_cas_n(sdram_cas_n),
        .sdram_ras_n(sdram_ras_n),
-       .sdram_dqm(sdram_dqm),
+       .sdram_dqm(sdram_dm),
        .sdram_adr(sdram_adr),
        .sdram_ba(sdram_ba),
        .sdram_dq(sdram_dq),
@@ -766,7 +793,6 @@ ddram #(
 //---------------------------------------------------------------------------
 // VGA
 //---------------------------------------------------------------------------
-`ifdef ENABLE_VGA
 vga #(
        .csr_addr(4'h3),
        .fml_depth(`SDRAM_DEPTH)
@@ -787,27 +813,11 @@ vga #(
        .vga_psave_n(vga_psave_n),
        .vga_hsync_n(vga_hsync_n),
        .vga_vsync_n(vga_vsync_n),
-       .vga_sync_n(vga_sync_n),
-       .vga_blank_n(vga_blank_n),
        .vga_r(vga_r),
        .vga_g(vga_g),
        .vga_b(vga_b),
-       .vga_clkout(vga_clkout)
+       .vga_clk(vga_clk)
 );
-`else
-assign csr_dr_vga = 32'd0;
-assign fml_vga_adr = {`SDRAM_DEPTH{1'bx}};
-assign fml_vga_stb = 1'b0;
-assign vga_psave_n = 1'b0;
-assign vga_hsync_n = 1'b0;
-assign vga_vsync_n = 1'b0;
-assign vga_sync_n = 1'b0;
-assign vga_blank_n = 1'b0;
-assign vga_r = 8'd0;
-assign vga_g = 8'd0;
-assign vga_b = 8'd0;
-assign vga_clkout = 1'b0;
-`endif
 
 //---------------------------------------------------------------------------
 // AC97
@@ -908,32 +918,37 @@ assign pfpubus_stb = 1'b0;
 // Texture Mapping Unit
 //---------------------------------------------------------------------------
 `ifdef ENABLE_TMU
-tmu #(
+tmu2 #(
        .csr_addr(4'h6),
        .fml_depth(`SDRAM_DEPTH)
 ) tmu (
        .sys_clk(sys_clk),
        .sys_rst(sys_rst),
-       
+
        .csr_a(csr_a),
        .csr_we(csr_we),
        .csr_di(csr_dw),
        .csr_do(csr_dr_tmu),
-       
+
        .irq(tmu_irq),
-       
+
        .wbm_adr_o(tmumbus_adr),
        .wbm_cti_o(tmumbus_cti),
        .wbm_cyc_o(tmumbus_cyc),
        .wbm_stb_o(tmumbus_stb),
        .wbm_ack_i(tmumbus_ack),
        .wbm_dat_i(tmumbus_dat_r),
-       
+
        .fmlr_adr(fml_tmur_adr),
        .fmlr_stb(fml_tmur_stb),
        .fmlr_ack(fml_tmur_ack),
        .fmlr_di(fml_tmur_dr),
-       
+
+       .fmldr_adr(fml_tmudr_adr),
+       .fmldr_stb(fml_tmudr_stb),
+       .fmldr_ack(fml_tmudr_ack),
+       .fmldr_di(fml_tmudr_dr),
+
        .fmlw_adr(fml_tmuw_adr),
        .fmlw_stb(fml_tmuw_stb),
        .fmlw_ack(fml_tmuw_ack),
@@ -954,10 +969,141 @@ assign tmumbus_stb = 1'b0;
 assign fml_tmur_adr = {`SDRAM_DEPTH{1'bx}};
 assign fml_tmur_stb = 1'b0;
 
+assign fml_tmudr_adr = {`SDRAM_DEPTH{1'bx}};
+assign fml_tmudr_stb = 1'b0;
+
 assign fml_tmuw_adr = {`SDRAM_DEPTH{1'bx}};
 assign fml_tmuw_stb = 1'b0;
 assign fml_tmuw_sel = 8'bx;
 assign fml_tmuw_dw = 64'bx;
 `endif
 
+//---------------------------------------------------------------------------
+// Ethernet
+//---------------------------------------------------------------------------
+`ifdef ENABLE_ETHERNET
+wire phy_tx_clk_b;
+AUTOBUF b_phy_tx_clk(
+       .I(phy_tx_clk),
+       .O(phy_tx_clk_b)
+);
+wire phy_rx_clk_b;
+AUTOBUF b_phy_rx_clk(
+       .I(phy_rx_clk),
+       .O(phy_rx_clk_b)
+);
+minimac #(
+       .csr_addr(4'h9)
+) ethernet (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_ethernet),
+
+       .wbrx_adr_o(ethernetrxbus_adr),
+       .wbrx_cti_o(ethernetrxbus_cti),
+       .wbrx_cyc_o(ethernetrxbus_cyc),
+       .wbrx_stb_o(ethernetrxbus_stb),
+       .wbrx_ack_i(ethernetrxbus_ack),
+       .wbrx_dat_o(ethernetrxbus_dat_w),
+
+       .wbtx_adr_o(ethernettxbus_adr),
+       .wbtx_cti_o(ethernettxbus_cti),
+       .wbtx_cyc_o(ethernettxbus_cyc),
+       .wbtx_stb_o(ethernettxbus_stb),
+       .wbtx_ack_i(ethernettxbus_ack),
+       .wbtx_dat_i(ethernettxbus_dat_r),
+
+       .irq_rx(ethernetrx_irq),
+       .irq_tx(ethernettx_irq),
+
+       .phy_tx_clk(phy_tx_clk_b),
+       .phy_tx_data(phy_tx_data),
+       .phy_tx_en(phy_tx_en),
+       .phy_tx_er(phy_tx_er),
+       .phy_rx_clk(phy_rx_clk),
+       .phy_rx_data(phy_rx_data_b),
+       .phy_dv(phy_dv),
+       .phy_rx_er(phy_rx_er),
+       .phy_col(phy_col),
+       .phy_crs(phy_crs),
+       .phy_mii_clk(phy_mii_clk),
+       .phy_mii_data(phy_mii_data)
+);
+`else
+assign csr_dr_ethernet = 32'd0;
+assign ethernetrxbus_adr = 32'bx;
+assign ethernetrxbus_cti = 3'bx;
+assign ethernetrxbus_cyc = 1'b0;
+assign ethernetrxbus_stb = 1'b0;
+assign ethernetrxbus_dat_w = 32'bx;
+assign ethernettxbus_adr = 32'bx;
+assign ethernettxbus_cti = 3'bx;
+assign ethernettxbus_cyc = 1'b0;
+assign ethernettxbus_stb = 1'b0;
+assign ethernettxbus_dat_r = 32'bx;
+assign ethernetrx_irq = 1'b0;
+assign ethernettx_irq = 1'b0;
+assign phy_tx_data = 4'b0;
+assign phy_tx_en = 1'b0;
+assign phy_tx_er = 1'b0;
+assign phy_mii_clk = 1'b0;
+assign phy_mii_data = 1'bz;
+`endif
+
+// TODO
+assign phy_clk = 1'b0;
+
+//---------------------------------------------------------------------------
+// FastMemoryLink usage and performance meter
+//---------------------------------------------------------------------------
+`ifdef ENABLE_FMLMETER
+fmlmeter #(
+       .csr_addr(4'ha)
+) fmlmeter (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_fmlmeter),
+
+       .fml_stb(fml_stb),
+       .fml_ack(fml_ack)
+);
+`else
+assign csr_dr_fmlmeter = 32'd0;
+`endif
+
+// TODO
+assign vga_sda = 1'b0;
+assign vga_sdc = 1'b0;
+
+assign mc_d[3:0] = 4'bz;
+assign mc_cmd = 1'bz;
+assign mc_clk = 1'b0;
+
+assign usba_spd = 1'b0;
+assign usba_oe_n = 1'b0;
+assign usba_vp = 1'bz;
+assign usba_vm = 1'bz;
+assign usbb_spd = 1'b0;
+assign usbb_oe_n = 1'b0;
+assign usbb_vp = 1'bz;
+assign usbb_vm = 1'bz;
+
+assign videoin_sda = 1'bz;
+assign videoin_sdc = 1'b0;
+
+assign midi_tx = 1'b0;
+
+assign dmxa_de = 1'b0;
+assign dmxa_d = 1'b0;
+assign dmxb_de = 1'b0;
+assign dmxb_d = 1'b0;
+
 endmodule
index ab9f8e4..443bc28 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Milkymist VJ SoC
- * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ * Copyright (C) 2007, 2008, 2009, 2010 Sebastien Bourdeauducq
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,28 +40,26 @@ module vga #(
        output vga_psave_n,
        output vga_hsync_n,
        output vga_vsync_n,
-       output vga_sync_n,
-       output vga_blank_n,
        output [7:0] vga_r,
        output [7:0] vga_g,
        output [7:0] vga_b,
-       output vga_clkout
+       output vga_clk
 );
 
-wire vga_clk_dcm;
-wire vga_clk_n_dcm;
-wire vga_clk;
-wire vga_clk_n;
+wire vga_iclk_dcm;
+wire vga_iclk_n_dcm;
+wire vga_iclk;
+wire vga_iclk_n;
 
 DCM_SP #(
        .CLKDV_DIVIDE(1.5),             // 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
 
-       .CLKFX_DIVIDE(8),               // 1 to 32
-       .CLKFX_MULTIPLY(2),             // 2 to 32
+       .CLKFX_DIVIDE(10),              // 1 to 32
+       .CLKFX_MULTIPLY(3),             // 2 to 32
 
        .CLKIN_DIVIDE_BY_2("FALSE"),
        .CLKIN_PERIOD(`CLOCK_PERIOD),
-       .CLKOUT_PHASE_SHIFT("VARIABLE"),
+       .CLKOUT_PHASE_SHIFT("NONE"),
        .CLK_FEEDBACK("1X"),
        .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
        .DFS_FREQUENCY_MODE("LOW"),
@@ -69,7 +67,7 @@ DCM_SP #(
        .DUTY_CYCLE_CORRECTION("TRUE"),
        .PHASE_SHIFT(0),
        .STARTUP_WAIT("FALSE")
-) clkgen_dqs (
+) clkgen_vga (
        .CLK0(),
        .CLK90(),
        .CLK180(),
@@ -79,22 +77,22 @@ DCM_SP #(
        .CLK2X180(),
 
        .CLKDV(),
-       .CLKFX(vga_clk_dcm),
-       .CLKFX180(vga_clk_n_dcm),
+       .CLKFX(vga_iclk_dcm),
+       .CLKFX180(vga_iclk_n_dcm),
        .LOCKED(),
-       .CLKFB(vga_clk),
+       .CLKFB(vga_iclk),
        .CLKIN(sys_clk),
        .RST(sys_rst),
 
        .PSEN(1'b0)
 );
 AUTOBUF b_p(
-       .I(vga_clk_dcm),
-       .O(vga_clk)
+       .I(vga_iclk_dcm),
+       .O(vga_iclk)
 );
 AUTOBUF b_n(
-       .I(vga_clk_n_dcm),
-       .O(vga_clk_n)
+       .I(vga_iclk_n_dcm),
+       .O(vga_iclk_n)
 );
 
 ODDR2 #(
@@ -102,9 +100,9 @@ ODDR2 #(
        .INIT(1'b0),
        .SRTYPE("SYNC")
 ) clock_forward (
-       .Q(vga_clkout),
-       .C0(vga_clk),
-       .C1(vga_clk_n),
+       .Q(vga_clk),
+       .C0(vga_iclk),
+       .C1(vga_iclk_n),
        .CE(1'b1),
        .D0(1'b1),
        .D1(1'b0),
@@ -129,12 +127,10 @@ vgafb #(
        .fml_ack(fml_ack),
        .fml_di(fml_di),
        
-       .vga_clk(vga_clk),
+       .vga_clk(vga_iclk),
        .vga_psave_n(vga_psave_n),
        .vga_hsync_n(vga_hsync_n),
        .vga_vsync_n(vga_vsync_n),
-       .vga_sync_n(vga_sync_n),
-       .vga_blank_n(vga_blank_n),
        .vga_r(vga_r),
        .vga_g(vga_g),
        .vga_b(vga_b)
index 5495862..7ce4713 100644 (file)
@@ -56,8 +56,10 @@ TMU_SRC=                                             \
        $(CORES_DIR)/tmu2/rtl/tmu2_texcache.v           \
        $(CORES_DIR)/tmu2/rtl/tmu2_vinterp.v            \
        $(CORES_DIR)/tmu2/rtl/tmu2_blend.v              \
-       $(CORES_DIR)/tmu2/rtl/tmu2_mult2_virtex4.v      \
+       $(CORES_DIR)/tmu2/rtl/tmu2_mult2.v              \
        $(CORES_DIR)/tmu2/rtl/tmu2_fdest.v              \
        $(CORES_DIR)/tmu2/rtl/tmu2_alpha.v
+ETHERNET_SRC=$(wildcard $(CORES_DIR)/minimac/rtl/*.v)
+FMLMETER_SRC=$(wildcard $(CORES_DIR)/fmlmeter/rtl/*.v)
 
-CORES_SRC=$(CONBUS_SRC) $(LM32_SRC) $(FMLARB_SRC) $(FMLBRG_SRC) $(CSRBRG_SRC) $(NORFLASH_SRC) $(UART_SRC) $(SYSCTL_SRC) $(HPDMC_SRC) $(VGAFB_SRC) $(AC97_SRC) $(PFPU_SRC) $(TMU_SRC)
+CORES_SRC=$(CONBUS_SRC) $(LM32_SRC) $(FMLARB_SRC) $(FMLBRG_SRC) $(CSRBRG_SRC) $(NORFLASH_SRC) $(UART_SRC) $(SYSCTL_SRC) $(HPDMC_SRC) $(VGAFB_SRC) $(AC97_SRC) $(PFPU_SRC) $(TMU_SRC) $(ETHERNET_SRC) $(FMLMETER_SRC)
index 167cd62..fb70cc7 100644 (file)
@@ -1,5 +1,8 @@
 # ==== Clock input ====\r
-NET "clk50" LOC = AB11;\r
+NET "clk50" LOC = AB11 | IOSTANDARD = LVCMOS33;\r
+\r
+NET "clk50" TNM_NET = "GRPclk50";\r
+TIMESPEC "TSclk50" = PERIOD "GRPclk50" 20 ns HIGH 50%;\r
 \r
 # ==== Flash ====\r
 NET "flash_adr(0)" LOC = L22;\r
@@ -43,24 +46,27 @@ NET "flash_d(13)" LOC = Y13;
 NET "flash_d(14)" LOC = AA12;\r
 NET "flash_d(15)" LOC = AB12;\r
 \r
-NET "flash_ce_n" LOC = M21;\r
-NET "flash_oe_n" LOC = M22;\r
-NET "flash_we_n" LOC = N20;\r
-NET "flash_rst_n" LOC = P22;\r
-NET "flash_sts" LOC = R20;\r
+NET "flash_adr(*)" IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "flash_d(*)" IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 | PULLDOWN;\r
+\r
+NET "flash_ce_n" LOC = M21 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "flash_oe_n" LOC = M22 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "flash_we_n" LOC = N20 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "flash_rst_n" LOC = P22 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "flash_sts" LOC = R20 | IOSTANDARD = LVCMOS33 | PULLUP;\r
 \r
 # ==== UART ====\r
-NET "uart_rx" LOC = K18;\r
-NET "uart_tx" LOC = L17;\r
+NET "uart_rx" LOC = K18 | IOSTANDARD = LVCMOS33 | PULLUP;\r
+NET "uart_tx" LOC = L17 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
 \r
 # ==== Pushbuttons ====\r
-NET "btn1" LOC = AB4;\r
-NET "btn2" LOC = AA4;\r
-NET "btn3" LOC = AB5;\r
+NET "btn1" LOC = AB4 | IOSTANDARD = LVCMOS33;\r
+NET "btn2" LOC = AA4 | IOSTANDARD = LVCMOS33;\r
+NET "btn3" LOC = AB5 | IOSTANDARD = LVCMOS33;\r
 \r
 # ==== LEDs ====\r
-NET "led1" LOC = B16;\r
-NET "led2" LOC = A16;\r
+NET "led1" LOC = B16 | IOSTANDARD = LVCMOS33 | SLEW = QUIETIO | DRIVE = 24;\r
+NET "led2" LOC = A16 | IOSTANDARD = LVCMOS33 | SLEW = QUIETIO | DRIVE = 24;\r
 \r
 # ==== DDR SDRAM ====\r
 NET "sdram_adr(0)" LOC = B1;\r
@@ -76,13 +82,21 @@ NET "sdram_adr(9)" LOC = C1;
 NET "sdram_adr(10)" LOC = C3;\r
 NET "sdram_adr(11)" LOC = D1;\r
 NET "sdram_adr(12)" LOC = D2;\r
+\r
 NET "sdram_ba(0)" LOC = A2;\r
 NET "sdram_ba(1)" LOC = E6;\r
-NET "sdram_cas_n" LOC = C4;\r
-NET "sdram_cke" LOC = G7;\r
-NET "sdram_cs_n" LOC = F7;\r
-NET "sdram_ras_n" LOC = E5;\r
-NET "sdram_we_n" LOC = D3;\r
+\r
+NET "sdram_adr(*)" IOSTANDARD = SSTL2_I;\r
+NET "sdram_ba(*)" IOSTANDARD = SSTL2_I;\r
+\r
+NET "sdram_cas_n" LOC = C4 | IOSTANDARD = SSTL2_I;\r
+NET "sdram_cke" LOC = G7 | IOSTANDARD = SSTL2_I;\r
+NET "sdram_cs_n" LOC = F7 | IOSTANDARD = SSTL2_I;\r
+NET "sdram_ras_n" LOC = E5 | IOSTANDARD = SSTL2_I;\r
+NET "sdram_we_n" LOC = D3 | IOSTANDARD = SSTL2_I;\r
+\r
+NET "sdram_clk_p" LOC = M3 | IOSTANDARD = SSTL2_I;\r
+NET "sdram_clk_n" LOC = L4 | IOSTANDARD = SSTL2_I;\r
 \r
 NET "sdram_dm(0)" LOC = E1;\r
 NET "sdram_dm(1)" LOC = E3;\r
@@ -94,9 +108,6 @@ NET "sdram_dqs(1)" LOC = F2;
 NET "sdram_dqs(2)" LOC = H5;\r
 NET "sdram_dqs(3)" LOC = H6;\r
 \r
-NET "sdram_clk_p" LOC = M3;\r
-NET "sdram_clk_n" LOC = L4;\r
-\r
 NET "sdram_dq(0)" LOC = Y2;\r
 NET "sdram_dq(1)" LOC = W3;\r
 NET "sdram_dq(2)" LOC = W1;\r
@@ -130,6 +141,10 @@ NET "sdram_dq(29)" LOC = R1;
 NET "sdram_dq(30)" LOC = P2;\r
 NET "sdram_dq(31)" LOC = P1;\r
 \r
+NET "sdram_dqs(*)" IOSTANDARD = SSTL2_I;\r
+NET "sdram_dm(*)" IOSTANDARD = SSTL2_I;\r
+NET "sdram_dq(*)" IOSTANDARD = SSTL2_I;\r
+\r
 # ==== VGA ====\r
 NET "vga_b(0)" LOC = D11;\r
 NET "vga_b(1)" LOC = C12;\r
@@ -156,68 +171,96 @@ NET "vga_r(5)" LOC = B8;
 NET "vga_r(6)" LOC = A8;\r
 NET "vga_r(7)" LOC = D9;\r
 \r
-NET "vga_hsync_n" LOC = A14;\r
-NET "vga_vsync_n" LOC = C15;\r
-NET "vga_clk" LOC = A11;\r
-NET "vga_psave_n" LOC = B14;\r
+NET "vga_r(*)" IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "vga_g(*)" IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "vga_b(*)" IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+\r
+NET "vga_hsync_n" LOC = A14 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "vga_vsync_n" LOC = C15 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "vga_clk" LOC = A11 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
+NET "vga_psave_n" LOC = B14 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8;\r
 \r
-NET "vga_sda" LOC = A15;\r
-NET "vga_sdc" LOC = D15;\r
+NET "vga_sda" LOC = A15 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
+NET "vga_sdc" LOC = D15 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
 \r
 # ==== Memory card ====\r
 NET "mc_d(0)" LOC = A18;\r
 NET "mc_d(1)" LOC = E16;\r
 NET "mc_d(2)" LOC = C17;\r
 NET "mc_d(3)" LOC = A17;\r
-NET "mc_cmd" LOC = B18;\r
-NET "mc_clk" LOC = A10;\r
+NET "mc_cmd" LOC = B18 | IOSTANDARD = LVCMOS33 | PULLUP;\r
+NET "mc_clk" LOC = A10 | IOSTANDARD = LVCMOS33;\r
+NET "mc_d(*)" IOSTANDARD = LVCMOS33 | PULLUP;\r
 \r
 # ==== AC97 ====\r
-NET "ac97_clk" LOC = C11;\r
-NET "ac97_sin" LOC = C5;\r
-NET "ac97_sout" LOC = A4;\r
-NET "ac97_sync" LOC = A5;\r
-NET "ac97_rst_n" LOC = D6;\r
+NET "ac97_clk" LOC = C11 | IOSTANDARD = LVCMOS33;\r
+NET "ac97_sin" LOC = C5 | IOSTANDARD = LVCMOS33;\r
+NET "ac97_sout" LOC = A4 | IOSTANDARD = LVCMOS33;\r
+NET "ac97_sync" LOC = A5 | IOSTANDARD = LVCMOS33;\r
+NET "ac97_rst_n" LOC = D6 | IOSTANDARD = LVCMOS33;\r
 \r
 # ==== USB ====\r
-NET "usba_spd" LOC = Y5;\r
-NET "usba_oe_n" LOC = Y6;\r
-NET "usba_rcv" LOC = V5;\r
-NET "usba_vp" LOC = U6;\r
-NET "usba_vm" LOC = R7;\r
-\r
-NET "usbb_spd" LOC = T7;\r
-NET "usbb_oe_n" LOC = R8;\r
-NET "usbb_rcv" LOC = R9;\r
-NET "usbb_vp" LOC = AB3;\r
-NET "usbb_vm" LOC = Y3;\r
+NET "usba_spd" LOC = Y5 | IOSTANDARD = LVCMOS33;\r
+NET "usba_oe_n" LOC = Y6 | IOSTANDARD = LVCMOS33;\r
+NET "usba_rcv" LOC = V5 | IOSTANDARD = LVCMOS33;\r
+NET "usba_vp" LOC = U6 | IOSTANDARD = LVCMOS33;\r
+NET "usba_vm" LOC = R7 | IOSTANDARD = LVCMOS33;\r
+\r
+NET "usbb_spd" LOC = T7 | IOSTANDARD = LVCMOS33;\r
+NET "usbb_oe_n" LOC = R8 | IOSTANDARD = LVCMOS33;\r
+NET "usbb_rcv" LOC = R9 | IOSTANDARD = LVCMOS33;\r
+NET "usbb_vp" LOC = AB3 | IOSTANDARD = LVCMOS33;\r
+NET "usbb_vm" LOC = Y3 | IOSTANDARD = LVCMOS33;\r
 \r
 # ==== Ethernet ====\r
-NET "phy_irq_n" LOC = L19;\r
-NET "phy_rst_n" LOC = R22;\r
-NET "phy_mii_clk" LOC = J20;\r
-NET "phy_mii_data" LOC = J22;\r
-\r
-NET "phy_dv" LOC = V21;\r
-NET "phy_rx_clk" LOC = H22;\r
-NET "phy_rx_er" LOC = V22;\r
+NET "phy_irq_n" LOC = L19 | IOSTANDARD = LVCMOS33;\r
+NET "phy_rst_n" LOC = R22 | IOSTANDARD = LVCMOS33;\r
+NET "phy_mii_clk" LOC = J20 | IOSTANDARD = LVCMOS33;\r
+NET "phy_mii_data" LOC = J22 | IOSTANDARD = LVCMOS33;\r
+\r
+NET "phy_dv" LOC = V21 | IOSTANDARD = LVCMOS33;\r
+NET "phy_rx_clk" LOC = H22 | IOSTANDARD = LVCMOS33;\r
+NET "phy_rx_er" LOC = V22 | IOSTANDARD = LVCMOS33;\r
 NET "phy_rx_data(0)" LOC = U22;\r
 NET "phy_rx_data(1)" LOC = U20;\r
 NET "phy_rx_data(2)" LOC = T22;\r
 NET "phy_rx_data(3)" LOC = T21;\r
+NET "phy_rx_data(*)" IOSTANDARD = LVCMOS33;\r
 \r
-NET "phy_tx_en" LOC = N19;\r
-NET "phy_tx_clk" LOC = H21;\r
-NET "phy_tx_er" LOC = M19;\r
+NET "phy_tx_en" LOC = N19 | IOSTANDARD = LVCMOS33;\r
+NET "phy_tx_clk" LOC = H21 | IOSTANDARD = LVCMOS33;\r
+NET "phy_tx_er" LOC = M19 | IOSTANDARD = LVCMOS33;\r
 NET "phy_tx_data(0)" LOC = M16;\r
 NET "phy_tx_data(1)" LOC = L15;\r
 NET "phy_tx_data(2)" LOC = P19;\r
 NET "phy_tx_data(3)" LOC = P20;\r
+NET "phy_tx_data(*)" IOSTANDARD = LVCMOS33;\r
+\r
+NET "phy_col" LOC = W20 | IOSTANDARD = LVCMOS33;\r
+NET "phy_crs" LOC = W22 | IOSTANDARD = LVCMOS33;\r
+\r
+NET "phy_clk" LOC = M20 | IOSTANDARD = LVCMOS33;\r
 \r
-NET "phy_col" LOC = W20;\r
-NET "phy_crs" LOC = W22;\r
+# Timing\r
+NET "phy_rx_clk" TNM_NET = "GRPphy_rx_clk";\r
+NET "phy_tx_clk" TNM_NET = "GRPphy_tx_clk";\r
+TIMESPEC "TSphy_tx_clk" = FROM "GRPphy_tx_clk" TO "PADS" 10 ns;\r
+TIMESPEC "TSphy_rx_clk" = FROM "PADS" TO "GRPphy_rx_clk" 6 ns;\r
 \r
-NET "phy_clk" LOC = M20;\r
+NET "phy_tx_clk" MAXSKEW = 1.0 ns;\r
+NET "phy_rx_clk" MAXSKEW = 1.0 ns;\r
+NET "phy_rx_clk" PERIOD = 40 ns HIGH 14 ns;\r
+NET "phy_tx_clk" PERIOD = 40 ns HIGH 14 ns;\r
+\r
+NET "phy_rx_data(0)" IOBDELAY = NONE;\r
+NET "phy_rx_data(1)" IOBDELAY = NONE;\r
+NET "phy_rx_data(2)" IOBDELAY = NONE;\r
+NET "phy_rx_data(3)" IOBDELAY = NONE;\r
+\r
+NET "phy_dv" IOBDELAY = NONE;\r
+NET "phy_rx_er" IOBDELAY = NONE;\r
+NET "phy_crs" IOBDELAY = NONE;\r
+NET "phy_col" IOBDELAY = NONE;\r
 \r
 # ==== Video input ====\r
 NET "videoin_p(0)" LOC = Y18;\r
@@ -228,43 +271,49 @@ NET "videoin_p(4)" LOC = U16;
 NET "videoin_p(5)" LOC = V19;\r
 NET "videoin_p(6)" LOC = V18;\r
 NET "videoin_p(7)" LOC = R16;\r
+NET "videoin_p(*)" IOSTANDARD = LVCMOS33;\r
 \r
-NET "videoin_hs" LOC = V17;\r
-NET "videoin_vs" LOC = Y17;\r
-NET "videoin_field" LOC = AB14;\r
-NET "videoin_llc" LOC = Y11;\r
+NET "videoin_hs" LOC = V17 | IOSTANDARD = LVCMOS33;\r
+NET "videoin_vs" LOC = Y17 | IOSTANDARD = LVCMOS33;\r
+NET "videoin_field" LOC = AB14 | IOSTANDARD = LVCMOS33;\r
+NET "videoin_llc" LOC = Y11 | IOSTANDARD = LVCMOS33;\r
 \r
-NET "videoin_irq_n" LOC = R15;\r
-NET "videoin_rst_n" LOC = W17;\r
-NET "videoin_sda" LOC = AB17;\r
-NET "videoin_sdc" LOC = AA14;\r
+NET "videoin_irq_n" LOC = R15 | IOSTANDARD = LVCMOS33;\r
+NET "videoin_rst_n" LOC = W17 | IOSTANDARD = LVCMOS33;\r
+NET "videoin_sda" LOC = AB17 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | PULLUP;\r
+NET "videoin_sdc" LOC = AA14 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
 \r
 # ==== MIDI ====\r
-NET "midi_tx" LOC = AA21;\r
-NET "midi_rx" LOC = AB21;\r
+NET "midi_tx" LOC = AA21 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
+NET "midi_rx" LOC = AB21 | IOSTANDARD = LVCMOS33;\r
 \r
 # ==== DMX ====\r
-NET "dmxa_r" LOC = AB20;\r
-NET "dmxa_de" LOC = T18;\r
-NET "dmxa_d" LOC = T17;\r
+NET "dmxa_r" LOC = AB20 | IOSTANDARD = LVCMOS33;\r
+NET "dmxa_de" LOC = T18 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
+NET "dmxa_d" LOC = T17 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
 \r
-NET "dmxb_r" LOC = Y19;\r
-NET "dmxb_de" LOC = AB19;\r
-NET "dmxb_d" LOC = W18;\r
+NET "dmxb_r" LOC = Y19 | IOSTANDARD = LVCMOS33;\r
+NET "dmxb_de" LOC = AB19 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
+NET "dmxb_d" LOC = W18 | IOSTANDARD = LVCMOS33 | SLEW = SLOW;\r
 \r
 # ==== IR ====\r
-NET "ir_rx" LOC = C16;\r
+NET "ir_rx" LOC = C16 | IOSTANDARD = LVCMOS33;\r
 \r
 # ==== Expansion connector ====\r
-NET "IO_L9N_1" LOC = G17;\r
-NET "IO_L9P_1" LOC = G16;\r
-NET "IO_L10N_1" LOC = F17;\r
-NET "IO_L10P_1" LOC = F16;\r
-NET "IO_L19N_1" LOC = B22;\r
-NET "IO_L19P_1" LOC = B21;\r
-NET "IO_L20N_1" LOC = A21;\r
-NET "IO_L20P_1" LOC = A20;\r
-NET "IO_L21N_1" LOC = J16;\r
-NET "IO_L21P_1" LOC = K16;\r
-NET "IO_L28N_VREF_1" LOC = H17;\r
-NET "IO_L28P_1" LOC = H16;\r
+NET "exp(0)" LOC = A20;\r
+NET "exp(1)" LOC = F16;\r
+NET "exp(2)" LOC = A21;\r
+NET "exp(3)" LOC = F17;\r
+NET "exp(4)" LOC = B21;\r
+NET "exp(5)" LOC = H16;\r
+NET "exp(6)" LOC = B22;\r
+NET "exp(7)" LOC = H17;\r
+NET "exp(8)" LOC = G16;\r
+NET "exp(9)" LOC = J16;\r
+NET "exp(10)" LOC = G17;\r
+NET "exp(11)" LOC = K16;\r
+\r
+NET "exp(*)" IOSTANDARD = LVCMOS33;\r
+\r
+# avoid floating signals\r
+NET "exp(*)" PULLDOWN;\r
index 0c1896a..89f7f95 100644 (file)
@@ -3,7 +3,7 @@ run
 -top system
 -ifmt MIXED
 -opt_mode SPEED
--opt_level 1
+-opt_level 2
 -ofn system.ngc
 -p xc6slx45-fgg484-2
 -register_balancing yes