【verilog每日一练】条件编译的使用 - FPGA开发者技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

Mill 关注 私信
[问答]

【verilog每日一练】条件编译的使用

请用verilog实现时钟频率的参数CLK_FRE在仿真的条件下数值为500,在实际条件下数值为50_000_000
image.png

回帖(6)

笑过就走

2023-8-31 14:10:20
  1. module clock_divider (  
  2.     input wire clk_50MHz,    // 50MHz input clock  
  3.     output reg clk_500Hz    // Output clock at 500Hz  
  4. );  
  5.   
  6. reg [19:0] counter; // 20-bit counter to divide the clock  
  7.   
  8. always @(posedge clk_50MHz) begin // Increments the counter on each 50MHz clock edge  
  9.     counter <= counter + 1;  
  10. end  
  11.   
  12. always @(posedge counter[19]) begin // Output clock on each counter overflow (i.e., every 500Hz)  
  13.     clk_500Hz <= ~clk_500Hz;  
  14. end  
  15.   
  16. endmodule

使用一个计数器进行分频以实现更低的频率。这个例子使用了50MHz的时钟源,然后将其分频到500Hz。


请注意,在实际应用中,需要选择一个合适的计数器大小以得到所需的频率,并且必须考虑时序问题,以确保输出时钟的稳定性。

另外,如果你需要一个固定的500Hz的时钟,那么你只需要一个简单的翻转时钟即可,不需要分频。以下是一个简单的例子:
  1. module fixed_clock (  
  2.     output reg clk_500Hz    // Output clock at 500Hz  
  3. );  
  4.   
  5. always @(posedge clk_50MHz) begin // Output clock on each 50MHz clock edge  
  6.     clk_500Hz <= ~clk_500Hz;  
  7. end  
  8.   
  9. endmodule

jf_99074111

2023-9-1 09:07:30
`define SIMULATION

`ifdef SIMULATION
    parameter CLK_PRE = 500;
`else
    parameter CLK_PRE = 50000000;
`endif

听风说梦

2023-9-1 13:46:17
define SIMULATION

ifdef SIMULATION
    parameter CLK_PRE = 500;
else
    parameter CLK_PRE = 50000000;
endif

jf_84491108

2023-9-1 13:54:35
`define SIMULATION

`ifdef SIMULATION

    parameter CLK_PRE = 500;

`else

    parameter CLK_PRE = 50000000;

`endif

更多回帖

×
发帖