微處理器 - Gowin GW1NSR-LV4CQN48PC6/I5 (Lichee Tang Nano 4K) - 如何透過GOWIN Tcl編譯專案



main.gprj

<?xml version="1" encoding="UTF-8"?>
<!DOCTYPE GOWIN>
<Project>
    <Template>FPGA</Template>
    <Version>5</Version>
    <Device name="GW1NSR-4C" pn="GW1NSR-LV4CQN48PC6/I5">gw1nsr4c-000</Device>
    <FileList>
        <File path="main.v" type="file.verilog" enable="1"/>
        <File path="main.cst" type="file.cst" enable="1"/>
    </FileList>
</Project>

main.v

module led (
    input sys_clk,
    input sys_rst_n,
    output reg led
);

reg [23:0] counter;

always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 24'd0;
    else if (counter < 24'd1350_0000)
        counter <= counter + 1;
    else
        counter <= 24'd0;
end

always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 1'b1;
    else if (counter == 24'd1350_0000)
        led <= ~led;
end

endmodule

main.cst

IO_LOC "led" 10;
IO_PORT "led" PULL_MODE=NONE DRIVE=8;
IO_LOC "sys_rst_n" 15;
IO_PORT "sys_rst_n" PULL_MODE=UP;
IO_LOC "sys_clk" 45;
IO_PORT "sys_clk" PULL_MODE=UP;

編譯

$ /opt/gowin/IDE/bin/gw_sh
*** GOWIN Tcl Command Line Console  *** 
% open_project main.gprj
    Open project /tmp/gg/main.gprj finished

% run all
    GowinSynthesis start
    Running parser ...
    Analyzing Verilog file '/tmp/gg/main.v'
    Compiling module 'led'("/tmp/gg/main.v":1)
    WARN  (EX3791) : Expression size 25 truncated to fit in target size 24("/tmp/gg/main.v":11)
    NOTE  (EX0101) : Current top module is "led"
    [5%] Running netlist conversion ...
    Running device independent optimization ...
    [10%] Optimizing Phase 0 completed
    [15%] Optimizing Phase 1 completed
    [25%] Optimizing Phase 2 completed
    Running inference ...
    [30%] Inferring Phase 0 completed
    [40%] Inferring Phase 1 completed
    [50%] Inferring Phase 2 completed
    [55%] Inferring Phase 3 completed
    Running technical mapping ...
    [60%] Tech-Mapping Phase 0 completed
    [65%] Tech-Mapping Phase 1 completed
    [75%] Tech-Mapping Phase 2 completed
    [80%] Tech-Mapping Phase 3 completed
    [90%] Tech-Mapping Phase 4 completed
    [95%] Generate netlist file "/tmp/gg/impl/gwsynthesis/main.vg" completed
    [100%] Generate report file "/tmp/gg/impl/gwsynthesis/main_syn.rpt.html" completed
    GowinSynthesis finish
    Reading netlist file: "/tmp/gg/impl/gwsynthesis/main.vg"
    Parsing netlist file "/tmp/gg/impl/gwsynthesis/main.vg" completed
    Processing netlist completed
    Reading constraint file: "/tmp/gg/main.cst"
    Physical Constraint parsed completed
    Running placement......
    [10%] Placement Phase 0 completed
    [20%] Placement Phase 1 completed
    [30%] Placement Phase 2 completed
    WARN  (TA1132) :  'sys_clk' was determined to be a clock but was not created.
    [50%] Placement Phase 3 completed
    Running routing......
    [60%] Routing Phase 0 completed
    [70%] Routing Phase 1 completed
    [80%] Routing Phase 2 completed
    WARN  (PR1014) : Generic routing resource will be used to clock signal 'sys_clk_d' by the specified constraint. And then it may lead to the excessive delay or skew
    [90%] Routing Phase 3 completed
    Running timing analysis......
    [95%] Timing analysis completed
    Placement and routing completed
    Bitstream generation in progress......
    Bitstream generation completed
    Running power analysis......
    [100%] Power analysis completed
    Generate file "/tmp/gg/impl/pnr/main.power.html" completed
    Generate file "/tmp/gg/impl/pnr/main.pin.html" completed
    Generate file "/tmp/gg/impl/pnr/main.rpt.html" completed
    Generate file "/tmp/gg/impl/pnr/main.rpt.txt" completed
    Generate file "/tmp/gg/impl/pnr/main.tr.html" completed
    Sat Dec  7 12:28:20 2024