Instance process

New Project -> Add Source Code File -> Add Timing, Pin Constraints -> Synthesis -> Programe

Before reading this document, please make sure you have seen Gowin Cloud Source Software User Guide, Chapter 5 Cloud Source Software Usage

The source code of this experiment: [https://github.com/sipeed/Tang-Nano-examples/tree/master/example_led](https://github.com/sipeed/Tang-Nano-examples/tree/master/ Example_led)

Verilog Prerequisites

Here only introduce the relevant syntax that will be used next, more can refer to Verilog Tutorial

The basic design unit of Verilog is the module, and each Verilog program consists of four main parts: port definition, I/O description, internal signal declaration and function definition.

The module is like the black box we usually mentioned. When we implement the module, we don't need to care about the inside of the module. We only need to instantiate the module according to the input and output format defined by the module, and provide input to the module. Already working

a module grows like this

module block (input a, output b);
reg [width-1:0] R_1;

assign b = a;
always @(posedge clk or negedge reset_n)
begin
// do something
end

endmodule

The overall structure of the module consists of module and endmodule. The module is followed by the definition of the module interface, which declares whether the direction of the port is input or output.

Internal signals are sometimes used inside the module, and the internal signals are of type wire and reg.

The definition of the function can be done through the assign and always blocks. Assign is one of the most common methods for describing combinatorial logic; always a block machine can be used to describe combinatorial logic, as well as to describe sequential logic

Pin usage

The onboard is a RGB(tri-color) LED, the schematic is as follows

The pin distribution used by the entire program is as follows

port I/O pin desc
sys_clk input 35 Clock Input Pin
sys_rst_n input 15 System Reset Foot
led[0] output 16 Green LED
led[1] output 17 Blue LED
led[2] output 18 Red LED

Programming

The clock of this system is 24Mhz, one machine cycle is 1/24M s, which means 0.5s every 12000000 clock cycles.

In the program, calculate 12000000 clock cycles by counter, and wait for 0.5s. After the time is up, set counter to 0 and change the color of the LED.

module led (
    input sys_clk, // clk input
    input sys_rst_n, // reset input
    output reg [2:0] led // 110 G, 101 R, 011 B
);

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'd1200_0000) // 0.5s delay
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end

always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 3'b110;
    else if (counter == 24'd1200_0000) // 0.5s delay
        led[2:0] <= {led[1:0], led[2]};
    else
        led <= led;
end

endmodule

Pin constraint

In order for fpga to implement the function of the code, it is also necessary to constrain the pin operations involved in the code to the actual pins of fpga.

As shown below, click process in the workspace on the left, then double-click FloorPlanner

The first click in the project, you may be prompted to create a file, click OK

In the pop-up window, switch to Package View, drag the port under Ports to the corresponding pin of fpga, save it, as shown below

Synthesis

In the workspace on the left, right-click Synthesize or Place&Route, there will be a run option, click

Programe

There are two options, one is to burn to sram, the other is to burn to flash.

Burning to sram is faster, but there is no firmware in fpga after power-off; burning to flash can save the firmware before burning after the system is powered off.

Burning is done through the Programer

Double-click on the Program Device in the left workspace to open the Programer.

However, before using Programer, you need to be aware that you can use Programer after both Synthesize and Place&Route are completed, otherwise the software will report error Bitstream file dose not exists

Linux users need to pay attention

The programmer in the Linux installation package is for Linux version Red Hat 5.10. For the Red Hat 6/7 version of the programmer, please download the installation on the official website and replace the installation package with the file in the Gowin cloud source software installation package. Clip "Programmer".

Change the burning position

To select the location where the firmware is programmed, you can click Edit -> Configure Device when the chip is selected.

In the pop-up window, select the location you want to burn. The flash is selected here. The default burning location is sram.

Burning

After selecting the burning location, you can burn the firmware, click on the menu bar to burn.