edwinfir

  • 2025-03-23
  • 回复了主题帖: 【AG32VH407开发板】完善官方CPLD案例(锁相环、PWM发波、按键)

    [localvideo]30a26ec1c0a89e6444b3011c6888aac4[/localvideo] 视频没有发出来,补上。 3Khz,50%的占空比。    

  • 2025-03-22
  • 加入了学习《HVI系列 - 如何驱动碳化硅 MOSFET 以优化高功率系统的性能和可靠性》,观看 如何驱动碳化硅 MOSFET 以优化高功率系统的性能和可靠性

  • 回复了主题帖: 【AG32VH407开发板】完善官方CPLD案例(锁相环、PWM发波、按键)

    秦天qintian0303 发表于 2025-3-22 10:00 像这种复位引脚应该单独引出来,包括一些硬件的内容 是的,开发板没有做CPLD的逻辑复位,如果自己新设计,可以做进去。

  • 2025-03-21
  • 发表了主题帖: 【AG32VH407开发板】完善官方CPLD案例(锁相环、PWM发波、按键)

    本帖最后由 edwinfir 于 2025-3-29 09:03 编辑    之前的测评文章已经体验了CPLD初级的功能,加上姚总给的LED例程比较简单,这次自己改善了一下,基本上把开发板的资源用了起来。     功能:利用内部的锁相环,将输入(PIN_2)的50Mhz时钟信号倍频到100Mhz, U2按键(PIN_35)按下后,在输出管脚(PIN_62)产生3KHZ,占空比为50%的PWM波形。 管脚设置文件编辑如下: I_CPLD_CLK_50M PIN_2    时钟输入50M  SCR_OUT PIN_62                PWM波形输出 rst PIN_53                             随意设置的,不能是7脚,否则波形出错。 button_in PIN_35                      按键输入 ledout[0] PIN_39                          LED输出 ledout[1] PIN_38                          LED输出 ledout[2] PIN_37                          LED输出 ledout[3] PIN_36                          LED输出 test1[0] PIN_9                            测试引脚,反应按键变化,同35脚 test1[1] PIN_10                          测试引脚,输出高电平 test1[2] PIN_11                            测试引脚,输出PWM信号 test1[3] PIN_14                              测试引脚,未使用    U7的3和39上都可以量到输出信号。 下面大致讲解程序: 在Quartus II 13.0sp1 (64-bit)建立工程,本文是利用Quartus II 13.0sp1 (64-bit)生成文件,再给Supra.exe 编译使用。   module SCR_DRIVER(I_CPLD_CLK_50M,rst,SCR_OUT,button_in,ledout,test1); input    I_CPLD_CLK_50M; input    rst; input button_in; output SCR_OUT; output [3:0] ledout; output [3:0] test1; reg [3:0]  ledout; reg [31:0] counter; // 内部信号 wire button_in,button_debounced,clk,I_CPLD_CLK_50M,rst,SCR_OUT,PWMX,pwm_en1,enable; wire [3:0] test1;   assign test1[0]=button_in;   assign test1[1]=enable;   assign test1[2]=PWMX;   assign SCR_OUT=PWMX;   assign enable=1'b1; // assign button_debounced=1'b1; // 实例化按键消抖模块 debounce debounce_inst (     .clk(clk),     .rst_n(1'b1),     .button_in(button_in),     .button_out(button_debounced) );               PLL_CLK    pll1_inst (     .areset ( 1'b0 ),     .inclk0 (I_CPLD_CLK_50M),     .c0 (clk)     );      pwm_gen  PWMA( .nreset(1'b1),.clk(clk),.en(button_debounced), .pwm(PWMX));           always@(posedge clk ) begin         counter <= counter+1;             case(counter[28:25])                     0:        ledout <= 4'b1110;                     1:        ledout <= 4'b1101;                     2:        ledout <= 4'b1011;                     3:        ledout <= 4'b0111;                     4:        ledout <= 4'b1100;                     5:        ledout <= 4'b0011;                     6:        ledout <= 4'b0000;                     7:        ledout <= 4'b1111;                 endcase          end          endmodule 程序架构如上图,SCR_DRIVER 部分是顶层文件,定义了输入输出,变量声明,LED部分的控制逻辑。                              pwm_gen PWM波形发生模块,产生PWM波形输出。 module pwm_gen( input nreset, input clk, input en, output reg pwm ); // 参数定义 parameter CLK_FREQ = 100_000_000; // 时钟频率为100MHz parameter PWM_FREQ = 3_000;      // PWM频率为3kHz parameter period = CLK_FREQ / PWM_FREQ; // PWM周期计数器最大值 parameter h_time = period / 2;       // 占空比为50% // 内部信号 reg [31:0] CNT; always @ (posedge clk or negedge nreset) begin     if(!nreset)         CNT <= 0;     else if(CNT >= period - 1 )         CNT <= 0;     else         CNT <= CNT + 1; end always @ (posedge clk or negedge nreset) begin     if(!nreset)         pwm <= 0;     else    //nreset = 1     begin         if(en == 0)             pwm <= 0;         else    //en = 1         begin             if(CNT <= h_time - 1)                 pwm <= 1;             else                 pwm <= 0;         end     end end endmodule                               debounce 按键消抖动模块,按下按钮,输出信号给PWM模块。 module debounce (     input wire clk,          // 时钟信号(100MHz)     input wire rst_n,        // 复位信号,低电平有效     input wire button_in,    // 按键输入信号(按下为低电平)     output reg button_out    // 消抖后的按键输出信号(按下为高电平) ); // 参数定义 parameter CLK_FREQ = 100_000_000; // 时钟频率为100MHz parameter DEBOUNCE_TIME = 20;    // 消抖时间为20ms parameter COUNTER_MAX = CLK_FREQ / 1000 * DEBOUNCE_TIME; // 计算计数器最大值 // 内部信号 reg [31:0] counter;              // 计数器,用于延时 reg button_sync;                 // 同步后的按键信号 reg button_prev;                 // 上一次的按键状态 // 同步按键输入信号,避免亚稳态 always @(posedge clk or negedge rst_n) begin     if (!rst_n) begin         button_sync <= 1'b0; // 默认按键未按下         button_prev <= 1'b0;     end else begin         button_sync <= button_in;         button_prev <= button_sync;     end end // 消抖逻辑 always @(posedge clk or negedge rst_n) begin     if (!rst_n) begin         counter <= 0;         button_out <= 1'b0;     end else begin         if (button_sync != button_prev) begin             // 按键状态发生变化,重置计数器             counter <= 0;         end else if (counter < COUNTER_MAX) begin             // 计数器未达到最大值,继续计数             counter <= counter + 1;         end else begin             // 计数器达到最大值,按键状态稳定             button_out <= ~button_sync; // 按键按下为低电平,输出高电平         end     end end endmodule                               PLL_CLK 锁相环模块,倍频输入时钟,得到稳定的时钟信号。   输入50MHZ   输出100MHZ,注意,这部分锁相环是利用Quartus II软件生成的,详细步骤可以查阅相关资料。 需要注意的是,有部分代码老是调试有问题,有个调试问题困扰了两个星期调试不出来,幸亏原厂工程师给出了相关建议解决了,感谢他们的付出!问题是:原理图里面的7脚,NRST,这个是芯片复位,按下后cpLd程序会重新加载, CPLD程序不能拿这个当做逻辑复位脚,这里我设置了任意不用的53脚。 CPLD逻辑复位,不能使用这个NRST重新加载程序,要不波形持续一段时间就没有了,切记,切记。 最终演示视频:    

  • 回复了主题帖: 【AG32VH407开发板】官方案例测试

    lugl4313820 发表于 2025-3-1 21:27 这个是什么语言来开发的?不象是MCU的代码,是不是科普一下下 这个是verilog代码,硬件描述语言,专门给CPLD/FPGA开发使用。 还有做芯片设计也是类似的语言。

  • 2025-03-09
  • 回复了主题帖: 【AG32VH407开发板】官方案例测试

    lugl4313820 发表于 2025-3-1 21:27 这个是什么语言来开发的?不象是MCU的代码,是不是科普一下下 这个是Verilog语言,是CPLD/FPGA开发最广泛的语言,现在最热门的芯片IC设计也是这种。

  • 2025-02-23
  • 发表了主题帖: [国产芯AGM新品AG32VH407]代码移植原来的芯片Altera的EPM1270

    这一篇重点介绍一下移植CPLD过程,使用软件中间出现的问题,以及实际移植后的效果。 1.安装软件,添加license 目录中的 licence.txt文件时候,安装路径不要有中文或者特殊字符,不然没反应,安装不上。 2.按照官方文档中MANUAL_AGRV2K_3.0的使用说明,发现默认开发Native,选项灰色,无法选择Compatible,   解决方法, 原来的软件已经锁定了编译方式。它软件默认是强制改成那个有一个模式了,按照如下这个方式把它关掉就行了。解决方法,在File->Setting菜单里,增加了一个Experimental项。如果填上AGRV_FULL_MODE,则会turn-off上述的Native锁定操作。重新关掉再进,发现解锁了。   3.原来如果现成的Quartus II 工程文件,记得是按软件里面的说明,需要添加进来原来的文件,否则编译会没有选项选择。 4.软件最好升级到13.0,同样的代码,13.0占用的逻辑资源少些,如下例,是储能产品里面的功率模块单元驱动板的CPLD代码占用资源情况。   9.0占用1182个逻辑门。   13.0占用1125个。 4.移植代码。按照官方说明在13.0里面重新选择器件EP4CE75,综合,   5.使用Supra.exe - 编译并下载,下载需要选择CMSIS-DAP,点击Query device ID,会出现Ox40200001 ,选USB_BLASTER没反应,选Jlink会报错。         右边显示烧录成功。 移植成功。    

  • 发表了主题帖: 【AG32VH407开发板】官方案例测试

    AG32VH407是AG32 MCU系列三合一的SOC,软件安装,开箱体验部分,前面已经有坛友分享过了,个人这部分只是简单描述,个人重点分享两个方面,一个是体验和代码移植,另外一个是官方开发板CPLD程序例程修改,本次做前面的体验和代码移植部分,基础的操作部分我就不展示了,只是讲一些开发过程中容易出错的部分。 1.MCU部分,这个是MCU部分,编译成功。   2.CPLD部分,使用的方法为使用Supra.exe加上Quartus II 13.0sp1 (64-bit)的开发方案,之前使用Quartus II的版本为9.0,重新下载Quartus II 13.0sp1,下载地址Quartus—— https://pan.baidu.com/s/1jwvTQ-k0yM4gJungurEVZA?pwd=zk71 如果使用Quartus II 9.0打不开,如下图:   使用13.0综合官方的例程,   使用Supra.exe编译并下载   中间需要注意VE文件的使用,手动编辑或者拷贝现成的都行,下次发帖我会再做一个完整的VE文件。 下图是控制LED的VE文件   下载成功并点亮。   示波器测试的LED驱动点波形:最小间隔时间250ms。   周期为1秒。   官方的VERILOG代码: module led(clk,ledout); input    clk; //input    rst; //output en; output [3:0] ledout; reg [3:0]  ledout; reg [31:0] counter; pll1    pll1_inst (     .areset ( 1'b0 ),     .inclk0 ( clk ),     .c0 ( c0 )     ); wire c0; always@(posedge c0 ) begin         counter <= counter+1;             case(counter[26:24])                     0:        ledout <= 4'b1110;                     1:        ledout <= 4'b1101;                     2:        ledout <= 4'b1011;                     3:        ledout <= 4'b0111;                     4:        ledout <= 4'b1100;                     5:        ledout <= 4'b0011;                     6:        ledout <= 4'b0000;                     7:        ledout <= 4'b1111;                 endcase          end          endmodule 官方的VE文件: clk PIN_2 ledout[0] PIN_39 ledout[1] PIN_38 ledout[2] PIN_37 ledout[3] PIN_36  

  • 2025-02-14
  • 回复了主题帖: 测评入围名单: 国产芯AGM 新品 AG32VH407(MCU+FPGA+64Mbit PSRAM)

    个人信息无误,确认可以完成测评分享计划

最近访客

< 1/1 >

统计信息

已有7人来访过

  • 芯积分:40
  • 好友:--
  • 主题:3
  • 回复:5

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言