verilog
1`timescale 1ns / 1ps 2////////////////////////////////////////////////////////////////////////////////// 3// Company: 4// Engineer: 5// 6// Create Date: 2021/10/15 08:34:15 7// Design Name: 8// Module Name: pckgen 9// Project Name: 10// Target Devices: 11// Tool Versions: 12// Description: 13// 14// Dependencies: 15// 16// Revision: 17// Revision 0.01 - File Created 18// Additional Comments: 19// 20////////////////////////////////////////////////////////////////////////////////// 21 22 23module pckgen( 24 input SYSCLK, 25 output PCK 26); 27 28wire CLKFBOUT, iPCK, locked; 29BUFG iBUFG (.I(iPCK), .O(PCK)); 30 31 MMCME2_BASE #( 32 .BANDWIDTH("OPTIMIZED"), // Jitter programming (OPTIMIZED, HIGH, LOW) 33 .CLKFBOUT_MULT_F(32), // 乗数M(2.000-64.000) 34 .CLKFBOUT_PHASE(0.0), // 位相(-360.000-360.000) 35 .CLKIN1_PERIOD(8.0), // CLKINの周期 36 // CLKOUT0_DIVIDE - CLKOUT6_DIVIDE: Divide amount for each CLKOUT (1-128) 37 .CLKOUT1_DIVIDE(1), 38 .CLKOUT2_DIVIDE(1), 39 .CLKOUT3_DIVIDE(1), 40 .CLKOUT4_DIVIDE(1), 41 .CLKOUT5_DIVIDE(1), 42 .CLKOUT6_DIVIDE(1), 43 .CLKOUT0_DIVIDE_F(6.75), // 除数Q(1.000-128.000) 44 // CLKOUT0_DUTY_CYCLE - CLKOUT6_DUTY_CYCLE: Duty cycle for each CLKOUT (0.01-0.99). 45 .CLKOUT0_DUTY_CYCLE(0.5), // デューティ比 46 .CLKOUT1_DUTY_CYCLE(0.5), 47 .CLKOUT2_DUTY_CYCLE(0.5), 48 .CLKOUT3_DUTY_CYCLE(0.5), 49 .CLKOUT4_DUTY_CYCLE(0.5), 50 .CLKOUT5_DUTY_CYCLE(0.5), 51 .CLKOUT6_DUTY_CYCLE(0.5), 52 // CLKOUT0_PHASE - CLKOUT6_PHASE: Phase offset for each CLKOUT (-360.000-360.000). 53 .CLKOUT0_PHASE(0.0), 54 .CLKOUT1_PHASE(0.0), 55 .CLKOUT2_PHASE(0.0), 56 .CLKOUT3_PHASE(0.0), 57 .CLKOUT4_PHASE(0.0), 58 .CLKOUT5_PHASE(0.0), 59 .CLKOUT6_PHASE(0.0), 60 .CLKOUT4_CASCADE("FALSE"), // Cascade CLKOUT4 counter with CLKOUT6 (FALSE, TRUE) 61 .DIVCLK_DIVIDE(4), // 除数D(1-106) 62 .REF_JITTER1(0.0), // Reference input jitter in UI (0.000-0.999). 63 .STARTUP_WAIT("FALSE") // Delays DONE until MMCM is locked (FALSE, TRUE) 64 ) 65 MMCME2_BASE_inst ( 66 // Clock Outputs: 1-bit (each) output: User configurable clock outputs 67 .CLKOUT0(iPCK), // 1-bit output: CLKOUT0 68 .CLKOUT0B(), // 1-bit output: Inverted CLKOUT0 69 .CLKOUT1(), // 1-bit output: CLKOUT1 70 .CLKOUT1B(), // 1-bit output: Inverted CLKOUT1 71 .CLKOUT2(), // 1-bit output: CLKOUT2 72 .CLKOUT2B(), // 1-bit output: Inverted CLKOUT2 73 .CLKOUT3(), // 1-bit output: CLKOUT3 74 .CLKOUT3B(), // 1-bit output: Inverted CLKOUT3 75 .CLKOUT4(), // 1-bit output: CLKOUT4 76 .CLKOUT5(), // 1-bit output: CLKOUT5 77 .CLKOUT6(), // 1-bit output: CLKOUT6 78 // Feedback Clocks: 1-bit (each) output: Clock feedback ports 79 .CLKFBOUT(CLKFBOUT), // 1-bit output: Feedback clock 80 .CLKFBOUTB(), // 1-bit output: Inverted CLKFBOUT 81 // Status Ports: 1-bit (each) output: MMCM status ports 82 .LOCKED(locked), // 1-bit output: LOCK 83 // Clock Inputs: 1-bit (each) input: Clock input 84 .CLKIN1(SYSCLK), // 1-bit input: Clock 85 // Control Ports: 1-bit (each) input: MMCM control ports 86 .PWRDWN(1'b0), // 1-bit input: Power-down 87 .RST(1'b0), // 1-bit input: Reset 88 // Feedback Clocks: 1-bit (each) input: Clock feedback ports 89 .CLKFBIN(CLKFBOUT) // 1-bit input: Feedback clock 90 ); 91 92endmodule 93
以上のコードはFPGAプログラミング大全 第二版を引用し一部改変しています.
もともとZyboを用いてVGAの出力をしていましたが,あるていどVerilogの勝手を理解したところで720pの映像出力をするように書き換えました。MMCMの設定に必要な値を間違えて設定したために720pで必要なピクセルクロック74.250 MHzの倍である148.5Hzに近い周波数が取れてしまいました.初代のZyboは本来クロック周波数125MHzまでの出力しか対応していないと聞いていたので驚いています.
MMCMを利用するとこのようなことがあり得るのでしょうか.
この質問はエラー等出ているわけではないですが,今後の成長のためにもこの疑問を晴らしたいと思い投稿しています.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。