###课程大纲 ### 课程平台 * [[https://www.eetree.cn/wiki/max10m02|MAX10M02小脚丫FPGA核心板]] * [[教师培训用扩展板]] * {{:training_board_sch.pdf|培训用扩展板的原理图}} * {{:training_board_sch_v2.pdf|培训用扩展板的原理图V2}} * {{:step-max10_原理图.pdf|MAX10M02小脚丫FPGA核心板原理图}} ### 使用设备 * [[https://www.eetree.cn/doc/detail/103|ADALM2000口袋仪器相关资料]] * [[https://www.eetree.cn/doc/detail/1132|测试测量仪器参考设计原理图]] ### 课程PPT * {{:fpga在高校教学和实践中的重要性.pdf|fpga在高校教学和实践中的重要性}} * {{:小脚丫fpga在国赛项目中的应用解析.pdf|小脚丫fpga在国赛项目中的应用解}} * {{:pwm调制.pptx|pwm调制}} * {{:时序逻辑.pptx|时序逻辑}} * {{:组合逻辑.pptx|组合逻辑}} * {{:verilog基本语法.pptx|verilog基本语法}} * {{:仿真及测试文件编写.pptx|仿真及测试文件编写}} * {{:有限状态机.pptx|有限状态机}} --- ### Verilog 代码 [[VerilogExamples]] #### Flash code module flash (clk,rst,led); input clk,rst; output [7:0] led; reg [2:0] cnt; wire clk1h; counter U1( .clk(clk), .rst_n(rst), .clk_1hz(clk1h) ); decode38 U2( .sw(cnt), .led(led) ); always @(posedge clk or negedge rst) if(!rst) cnt <= 1'b0; else cnt <= cnt + 1'b1; endmodule #### Counter代码 module counter ( input clk, input rst_n, output reg clk_1hz ); parameter NUM = 12_000_000; reg [23:0] cnt; always @(posedge clk or negedge rst_n) if(!rst_n) cnt <= 1'b0; else if(cnt >= (NUM-1)) cnt <= 1'b0; else cnt <= cnt + 1'b1; always @(posedge clk or negedge rst_n) if(!rst_n) clk_1hz <=1'b0; else if(cnt <= (NUM>>1)) clk_1hz <= 1'b0; else clk_1hz <= 1'b1; endmodule #### PWMPulse代码 //******************************************************** // Copyright(c)2016, STEP FPGA // All rights reserved // File name : pwmpulse.v // Module name : pwmpulse // Author : STEP // Email : info@stepfpga.com // Data : 2019/08/01 // Version : V1.0 // Description : // // Modification history // ---------------------------------------------------------------------------- // Version // Description // //******************************************************** //******************* //DEFINE MODULE PORT //******************* module pwmpulse ( //INPUT clk , rst , pwmin, //OUTPUT pwmout ); //******************* //DEFINE PARAMETER //******************* parameter CYCLE = 64;//cycle,产生PWM波形周期的计数器值 //******************* //DEFINE INPUT //******************* input clk,rst; //时钟,复位输入 小脚丫上时钟是12MHz input [7:0] pwmin; //PWM波形占空比 //******************* //DEFINE OUTPUT //******************* output reg pwmout; //PWM输出 //********************* //INNER SIGNAL DECLARATION //********************* reg [7:0] count; //产生波形周期的计数器 always@(posedge clk) if (!rst) count<=0; else if(count==CYCLE-1) count<=0; else count<=count+1; //比较后输出PWM值 always@(*) if(pwmin>count[7:0]) pwmout<=1; else pwmout<=0; endmodule #### PWM代码 module pwm ( //INPUT clk , rst , pwmout ); input clk,rst; output pwmout; wire [7:0] pwmin; //reg [7:0]pwmin; pwmpulse u1 ( .clk(clk) , .rst(rst) , .pwmin(pwmin), .pwmout(pwmout) ); assign pwmin = 8'd10; endmodule