fpga助教面试题
- 其他
- 2025-08-29 11:06:02

第一题
module sfp_pwm( input wire clk, //clk is 200M input wire rst_n, input wire clk_10M_i, input wire PPS_i, output reg pwm ) reg [6:0] cunt ; always @(posedge clk ) begin if(!rst_n) cunt<=0; else if(cunt==19) //200M是10M的20倍 cunt<=0; else cunt<=cunt+1; end always @(posedge clk_10M_i ) begin if(!rst_n) pwm<=0; else if(PPS_i&&cunt<15) pwm<=1; else if(PPS_i==0&&cunt<10) pwm<=1; else pwm<=0; end endmodule第二题 需要用到vivado pll时钟这个ip核 因为1.023这个时钟无法直接产生可以先产生10.23M的时钟 再通过分频产生1.023 M的时钟
`timescale 1ns / 1ps module test_two( input wire clk, //clk is 60M input wire rst_n, output wire clk_1023k_o, output reg [11:0] ca ); wire clk_out1; wire resetn ; wire locked ; reg [3:0] cunt ; wire clk_1023; assign resetn=(rst_n&&locked)?1:0; assign clk_1023k_o=(cunt<5)?1:0; //1.023M时钟 always @(posedge clk_out1 ) begin if(!resetn) cunt<=0; else if(cunt==9) cunt<=0; else cunt<=cunt+1; end always @(posedge clk_1023k_o ) begin if(!resetn) ca<=12'h124; else ca <= {ca[10:0], ca[11] ^ ca[10] ^ ca[7] ^ ca[5]}; end clk_wiz_0 instance_name ( // Clock out ports .clk_out1(clk_out1), // output clk_out1 // Status and control signals .resetn(resetn), // input resetn .locked(locked), // output locked // Clock in ports .clk_in1(clk)); // input clk_in1 endmodule