Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Verilog中的pin强制到特定频率_Verilog_Clock_Xilinx - Fatal编程技术网

将Verilog中的pin强制到特定频率

将Verilog中的pin强制到特定频率,verilog,clock,xilinx,Verilog,Clock,Xilinx,我试图寻找这个问题的答案,但没有结果。我在重新合成代码时遇到问题,我怀疑这是由于时钟问题造成的 我使用DCM将外部晶体振荡器从25MHz倍增到50MHz。然而,我认为工具不会知道晶体振荡器的实际频率,因为它是一个外部物理组件。我的代码如下: //since our crystal oscillator is only 25Mhz, we use a DCM to multiply it by two since the desired is 50Mhz DCM #( .CLKFX_DIV

我试图寻找这个问题的答案,但没有结果。我在重新合成代码时遇到问题,我怀疑这是由于时钟问题造成的

我使用DCM将外部晶体振荡器从25MHz倍增到50MHz。然而,我认为工具不会知道晶体振荡器的实际频率,因为它是一个外部物理组件。我的代码如下:

//since our crystal oscillator is only 25Mhz, we use a DCM to multiply it by two since the desired is 50Mhz
DCM #(
    .CLKFX_DIVIDE   (2), 
    .CLKFX_MULTIPLY (4) 
) dcm_master (
    .CLKFB    (CLK_FB), 
    .CLKIN    (CLK_crystal), 
    .RST      (DcmReset),    
    .CLK0     (MasterClk0Unbuf), 
    .CLK90    (), 
    .CLK180   (), 
    .CLK270   (), 
    .CLK2X    (), 
    .CLK2X180 (),    
    .CLKFX    (MasterClkFxUnBuf), 
    .CLKFX180 (),
    .CLKDV    (), 
    .LOCKED   (DcmLocked),
    .STATUS   (),
    .PSCLK    (1'b0),
    .PSEN     (1'b0),
    .PSINCDEC (1'b0),
    .PSDONE   ()    
); 

//we provide feedback to the DCM's phase input (possibly not neccessary)
BUFG bufg_master_dcm_clk_0  ( .I(MasterClk0Unbuf),  .O(CLK_FB) );
BUFG bufg_master_dcm_clk_fx ( .I(MasterClkFxUnBuf), .O(CLK_FX) );

//code taken from xilinx. We toggle using a bufgmux between the onboard and external clock
// BUFGMUX: Global Clock Buffer 2-to-1 MUX
// Spartan-3
// Xilinx HDL Libraries Guide, version 13.2
BUFGMUX BUFGMUX_inst (
.O(CLK), // Clock MUX output
.I0(CLK_FX), // Clock0 input
.I1(CLK_local), // Clock1 input
.S(sw[6]) // Clock select input
);
ucf中的此代码是否会强制工具将DCM的输出识别为50MHz

PIN "bufg_master_dcm_clk_fx.O" TNM_NET = CLK50;
TIMESPEC TS_CLKBuf = PERIOD "CLK50" 100 MHz HIGH 50%;  
此外,我是否正确使用BUFG?Xilinx说我应该使用IBUFG将外部时钟连接到我的DCM,我收到错误消息说我的BUFG只能处理一半的芯片(我想这会变得很麻烦)

谢谢


内森

我想先测试一下。对于Spartan-3系列FPGA,使用一个DCM。这是ISE生成的模板

请注意,有一个专用的CLK2X

此外,根据用户手册:.CLKFB应由BUFG源驱动

     wire i_FeedBack;
     wire o_FeedBack;

     BUFG clkFBBuf(
            .I(i_FeedBack),
            .O(o_FeedBack)
     );


     DCM #(
 [...]
  .CLKFX_DIVIDE(1),   // Can be any integer from 1 to 32
  .CLKFX_MULTIPLY(2), // Can be any integer from 2 to 32
 [..]

 ) DCM_inst (
      .CLK0(i_FeedBack),     // 0 degree DCM CLK output
      .CLK2X(CLK2X),   // 2X DCM CLK output
      [...]
      .CLKFX(CLKFX),   // DCM CLK synthesis out (M/D)
      .CLKFB(o_FeedBack),   // DCM clock feedback
      .CLKIN(clk),   // Clock input (from IBUFG, BUFG or DCM)
      [...]
   );

我想先测试一下。对于Spartan-3系列FPGA,使用一个DCM。这是ISE生成的模板

请注意,有一个专用的CLK2X

此外,根据用户手册:.CLKFB应由BUFG源驱动

     wire i_FeedBack;
     wire o_FeedBack;

     BUFG clkFBBuf(
            .I(i_FeedBack),
            .O(o_FeedBack)
     );


     DCM #(
 [...]
  .CLKFX_DIVIDE(1),   // Can be any integer from 1 to 32
  .CLKFX_MULTIPLY(2), // Can be any integer from 2 to 32
 [..]

 ) DCM_inst (
      .CLK0(i_FeedBack),     // 0 degree DCM CLK output
      .CLK2X(CLK2X),   // 2X DCM CLK output
      [...]
      .CLKFX(CLKFX),   // DCM CLK synthesis out (M/D)
      .CLKFB(o_FeedBack),   // DCM clock feedback
      .CLKIN(clk),   // Clock input (from IBUFG, BUFG or DCM)
      [...]
   );

我想你的时间限制取消了。您应该约束DCM的输入——DCM知道如何处理输出。以下是我将使用的:

NET clk_in TNM_NET = tnm_clk_in;
TIMESPEC TS_clk_in = PERIOD tnm_clk_in 40ns;

其中clk_in是晶体(在您的案例中为clk_晶体)。确保该晶体已连接到设备上的时钟引脚。

我认为您的时钟限制已关闭。您应该约束DCM的输入——DCM知道如何处理输出。以下是我将使用的:

NET clk_in TNM_NET = tnm_clk_in;
TIMESPEC TS_clk_in = PERIOD tnm_clk_in 40ns;

其中clk_in是晶体(在您的案例中为clk_晶体)。确保晶体连接到设备上的时钟引脚。

是否有原因不能始终使用
(posedge CLK或negedge CLK)
?@Nathan G-如果您尝试这样做,它会抛出一个错误-“当前软件版本不支持您用于描述寄存器或闩锁的描述样式”。我很难想象如何从两个时钟边缘驱动触发器。这是一个关于将时钟约束应用于合成而不是Verilog实现的问题吗?@Morgan-这是正确的。有什么原因不能只使用
始终@(posedge CLK或negedge CLK)
?@Nathan G-如果您尝试这样做,它会抛出一个错误-“您用于描述寄存器或锁存器的描述样式在当前软件版本中不受支持”。我无法轻松想象您将如何从两个时钟边缘驱动触发器。这是关于将时钟约束应用于合成而不是Verilog实现的问题吗?@Morgan-这是正确的