Simulink HDL Coder FPGA初级开发实践 LED流水灯

Posted 肆拾伍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Simulink HDL Coder FPGA初级开发实践 LED流水灯相关的知识,希望对你有一定的参考价值。

前言: 本栏目除特别说明以外,均采用的黑金AX7103开发板,该开发板时钟频率为200M,并且是双端时钟,因此在每个项目中都有一段原语将双端时钟变成200MHz的单端时钟。文章仅作为学习记录,如有不足请在评论区指出,博主不会对各位的问题作出解答,请谅解。博主深知网络上关于HDL Coder的资料十分稀少,特别是中文资料几乎没有,并且官方给出的例子大多挺难不适合入门,因此将自己摸索的过程记录下来,希望给后人一些启发。

文章目录

1. Simulink 模型


LED_HDL模块内部结构

首先计算1s所需要多少个时钟周期,然后当计数器大于一半的时候亮,小于一半的时候灭,就可以达到呼吸灯的效果了。

2. 生成HDL代码

// -------------------------------------------------------------
// 
// File Name: hdlsrc\\led_mbd\\LED_HDL.v
// Created: 2022-03-09 17:06:11
// 
// Generated by MATLAB 9.10 and HDL Coder 3.18
// 
// 
// -- -------------------------------------------------------------
// -- Rate and Clocking Details
// -- -------------------------------------------------------------
// Model base rate: 0.2
// Target subsystem base rate: 0.2
// 
// 
// Clock Enable  Sample Time
// -- -------------------------------------------------------------
// ce_out        0.2
// -- -------------------------------------------------------------
// 
// 
// Output Signal                 Clock Enable  Sample Time
// -- -------------------------------------------------------------
// out                           ce_out        0.2
// out1                          ce_out        0.2
// out2                          ce_out        0.2
// out3                          ce_out        0.2
// -- -------------------------------------------------------------
// 
// -------------------------------------------------------------


// -------------------------------------------------------------
// 
// Module: LED_HDL
// Source Path: led_mbd/LED_HDL
// Hierarchy Level: 0
// 
// -------------------------------------------------------------

`timescale 1 ns / 1 ns

module LED_HDL  // 由于使用的开发板是双端时钟,这里需要将默认生成的时钟稍微修改一下
          (clk_p,
          clk_n,
           reset,

           out,
           out1,
           out2,
           out3);


  input   clk_n;
  input  clk_p; 
  input   reset;

  output  out;
  output  out1;
  output  out2;
  output  out3;


  wire enb;
  wire [31:0] PlusOne_out1;  // uint32
  wire [31:0] threshold_out1;  // uint32
  wire [31:0] Constant5_out1;  // uint32
  wire [31:0] Return_0_out1;  // uint32
  reg [31:0] Delay_out1;  // uint32
  wire [31:0] Add_out1;  // uint32
  wire GreaterThan_Threshold_relop1;
  wire switch_compare_1;
  reg [31:0] Delay1_out1;  // uint32
  wire [31:0] Light_on_out1;  // uint32
  wire GreaterThan2_relop1;


IBUFDS sys_clk_ibufgds  // 这部分需要自行添加,用于生成单端时钟
       (
         .O              (clk                  ),
         .I              (clk_p                ),
         .IB             (clk_n                )
       );

  assign enb = 1;

  assign PlusOne_out1 = 32'b00000000000000000000000000000001;  // 加1


  assign threshold_out1 = 32'd200_000_000;  // 计数到1s


  assign Constant5_out1 = 32'b00000000000000000000000000000000;  //归零


  always @(posedge clk or posedge reset)
    begin : Delay_process
      if (reset == 1'b0) begin
        Delay_out1 <= 32'b00000000000000000000000000000000;
      end
      else begin
        if (enb) begin
          Delay_out1 <= Return_0_out1;
        end
      end
    end


  assign Add_out1 = Delay_out1 + PlusOne_out1;


  assign GreaterThan_Threshold_relop1 = Add_out1 > threshold_out1;


  assign switch_compare_1 = GreaterThan_Threshold_relop1 > 1'b0;



  assign Return_0_out1 = (switch_compare_1 == 1'b0 ? Add_out1 :
              Constant5_out1);


  always @(posedge clk or posedge reset)
    begin : Delay1_process
      if (reset == 1'b0) begin
        Delay1_out1 <= 32'b00000000000000000000000000000000;
      end
      else begin
        if (enb) begin
          Delay1_out1 <= Return_0_out1;
        end
      end
    end


  assign Light_on_out1 = 32'd100_000_000;


  assign GreaterThan2_relop1 = Delay1_out1 > Light_on_out1;


  assign out = GreaterThan2_relop1;

  assign out1 = GreaterThan2_relop1;

  assign out2 = GreaterThan2_relop1;

  assign out3 = GreaterThan2_relop1;



endmodule  // LED_HDL

3. 完整代码

链接:https://pan.baidu.com/s/10W2LXTxMCCltrfUWeCo_lQ?pwd=1111
提取码:1111
–来自百度网盘超级会员V6的分享

4. 完整使用流程

如果对HDL Coder的使用流程不熟悉,请根据另一篇文章从头练习一边,见Simulink HDL Coder FPGA开发实践之 基本使用流程介绍

以上是关于Simulink HDL Coder FPGA初级开发实践 LED流水灯的主要内容,如果未能解决你的问题,请参考以下文章

Simulink HDL Coder FPGA初级开发实践 按键消抖

Simulink HDL Coder FPGA初级开发实践 LED呼吸灯

Simulink HDL Coder FPGA初级开发实践 LED呼吸灯

Simulink HDL Coder FPGA初级开发实践 LED流水灯

Simulink HDL Coder FPGA初级开发实践 LED流水灯

Simulink HDL Coder FPGA初级开发实践 自动贩卖机建模