Verilog与数电[4]-点灯

硬件

SiPeed Tang-Primer-20k开发板

点灯

[https://wiki.sipeed.com/hardware/zh/tang/tang-primer-20k/examples/led.html]
candy1.v

//点灯
module led(
    input  Clock,
    output IO_voltage
);

/**********计时部分**********/
//parameter Clock_frequency = 27_000_000; // 时钟频率为27Mhz
parameter count_value       = 13_499_999; // 计时 0.5S 所需要的计数次数

reg [23:0]  count_value_reg ; // 计数器
reg         count_value_flag; // IO 电平翻转标志

always @(posedge Clock) begin
    if ( count_value_reg <= count_value ) begin //没有计数到 0.5S
        count_value_reg  <= count_value_reg + 1'b1; // 继续计数
        count_value_flag <= 1'b0 ; // 不产生翻转标志
    end
    else begin //计数到 0.5S 了
        count_value_reg  <= 23'b0; // 清零计数器,为重新计数最准备
        count_value_flag <= 1'b1 ; // 产生翻转标志
    end
end
reg IO_voltage_reg = 1'b0; // 声明 IO 电平状态用于达到计时时间后的翻转,并赋予一个低电平初始态

/**********电平翻转部分**********/
always @(posedge Clock) begin
    if ( count_value_flag )  //  电平翻转标志有效
        IO_voltage_reg <= ~IO_voltage_reg; // IO 电平翻转
    else //  电平翻转标志无效
        IO_voltage_reg <= IO_voltage_reg; // IO 电平不变
end


/**********补充一行代码**********/
assign IO_voltage = IO_voltage_reg;

endmodule

保存文件后点击左下Process,右击Synthesize->Run进行综合生成综合网表

网表通常传递了电路连接方面的信息,例如模块的实例、线网以及相关属性。如果需要包含更多的硬件信息,通常会使用硬件描述语言,例如Verilog、VHDL或其他的专用语言来进行描述、验证和仿真。高抽象层次(如寄存器传输级)的硬件描述可以通过逻辑综合转换为低抽象层次(逻辑门级)的电路连线网表,这一步骤目前可以使用自动化工具完成,这也大大降低了设计人员处理超大规模集成电路的繁琐程度。硬件厂商利用上述网表,可以制造具体的专用集成电路或其他电路。一些相对较小的电路也可以在现场可编程逻辑门阵列上实现。



点击 Synthesize 上面的 FloorPlanner 来进行管脚约束



完成约束后就要开始运行布局布线了,目的是为了把综合所生成的网表与我们自己定义的约束来通过 IDE 算出最优解然后将资源合理地分配在 FPGA 芯片上。
双击Place&Route

使用高云云源编程器教育版进行烧录,
接线说明:

接线有些费事,一定要注意丝印的示意图,别接反了😓
成功识别到设备

烧录有两种模式:SRAM和FLASH,SRAM下电丢失程序,FLASH可以上电运行程序

效果是看不到了,因为丐版是没有LED模块的

szfpga的GW1N-0318开发板点灯

厂商
开发板资料

硬件简介




注意:

代码

时钟分频

//点灯
module led(
    input  Clock,
    output IO_voltage
);

/**********计时部分**********/
//parameter Clock_frequency = 50_000_000; // 时钟频率为50Mhz
parameter count_value       = 43_499_999; // 计时 ??S 所需要的计数次数

reg [23:0]  count_value_reg ; // 计数器
reg         count_value_flag; // IO 电平翻转标志

always @(posedge Clock) begin
    if ( count_value_reg <= count_value ) begin //没有计数到 0.5S
        count_value_reg  <= count_value_reg + 1'b1; // 继续计数
        count_value_flag <= 1'b0 ; // 不产生翻转标志
    end
    else begin //计数到 0.5S 了
        count_value_reg  <= 23'b0; // 清零计数器,为重新计数最准备
        count_value_flag <= 1'b1 ; // 产生翻转标志
    end
end
reg IO_voltage_reg = 1'b0; // 声明 IO 电平状态用于达到计时时间后的翻转,并赋予一个低电平初始态

/**********电平翻转部分**********/
always @(posedge Clock) begin
    if ( count_value_flag )  //  电平翻转标志有效
        IO_voltage_reg <= ~IO_voltage_reg; // IO 电平翻转
    else //  电平翻转标志无效
        IO_voltage_reg <= IO_voltage_reg; // IO 电平不变
end
/**********补充一行代码**********/
assign IO_voltage = IO_voltage_reg;
endmodule

烧录


效果

由于计数器没有写好,所以灯看起来是常亮的😂

posted @ 2022-10-15 22:01  qsBye  阅读(160)  评论(0编辑  收藏  举报