vivado verilog 调用clk ip核,在该模块声明wire locked,能保证clk 核运行正常吗
时间: 2023-06-15 11:03:05 浏览: 518
在Vivado中,IP核的时钟输入端口是具有锁定功能的。当我们使用IP核时,一般情况下,Vivado会使用锁定的时钟输入端口,以保证时钟的稳定性和准确性。因此,在调用IP核时,你可以声明一个wire类型的信号,并将其连接到时钟输入端口,再声明为locked类型的信号,以确保时钟的稳定性。这样可以保证IP核能够正常工作。
相关问题
vivado pll ip核详解
在Vivado中,PLL(Phase-Locked Loop)是一种常用的IP核,用于生成稳定的时钟信号。引用中提到了一种实例化PLL IP的方法,即在Verilog程序中将IP的例化模板内容复制粘贴,并进行实例化。常见的存储器IP核(如ROM、RAM、FIFO)、分频器IP核以及加减法IP核都可以使用类似的方法实例化。
要详细了解Vivado中的PLL IP核,可以创建一个顶层设计文件,并在文件中编写相应的代码来实例化PLL IP。代码中需要注意一些细节,例如PLL的复位是高电平有效,需要与rst_n信号反向连接,而rst_n是低电平复位。
在Vivado中使用PLL IP核,通常需要定义时钟输入信号(如20MHz系统时钟)、复位信号以及输出的PLL时钟信号(即clk_out)。同时,还需要定义控制信号(如locked)和PLL的实例化。通过实例化PLL IP核,可以生成稳定的时钟信号,用于系统设计中的时序控制等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [【FPGA】Vivado软件 PLL IP核使用教程](https://blog.csdn.net/qq_65274042/article/details/129842553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [FPGA开发部分IP核例化详解](https://download.csdn.net/download/syb_love_jiexin/9961101)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
vivado调用pll原语
### 如何在 Vivado 中使用 PLL 原语进行设计
#### 创建和配置 PLL 实例
为了在 Vivado 中正确调用并使用 PLL 原语,通常会通过 IP Catalog 来集成 MMCM 或者 PLL 模块。然而,在某些情况下也可以直接实例化 PLL 并手动设置参数。
当需要直接操作 PLL 时,可以在 RTL 设计文件中声明 PLL 组件,并按照特定的方式对其进行端口映射。下面是一个简单的 VHDL 和 Verilog 示例来展示如何实现这一点:
#### 使用 PLL 原语的 VHDL 示例
```vhdl
library unisim;
use unisim.vcomponents.all;
entity pll_example is
port (
clk_in1 : in std_logic;
reset : in std_logic;
locked : out std_logic;
clk_out1: out std_logic
);
end entity;
architecture Behavioral of pll_example is
begin
pll_inst : PLLE2_ADV generic map(
BANDWIDTH => "OPTIMIZED",
CLKFBOUT_MULT => 5,
DIVCLK_DIVIDE => 1,
CLKOUT0_DIVIDE => 10,
CLKIN1_PERIOD => 3.33
)
port map (
RST => reset,
CLKFBDCM => '0',
CLKFBIN => open,
CLKINSEL => '1',
CLKIN1 => clk_in1,
CLKFBOUT => open,
CLKOUT0 => clk_out1,
LOCKED => locked
);
end architecture;
```
#### 使用 PLL 原语的 Verilog 示例
```verilog
`timescale 1ns / 1ps
module pll_example (
input wire clk_in1,
input wire reset,
output reg locked,
output wire clk_out1
);
// Instantiate the Xilinx PLL primitive
PLLE2_ADV #(
.BANDWIDTH ("OPTIMIZED"), // Jitter programming (default="OPTIMIZED")
.CLKFBOUT_MULT (5), // Multiply value for all CLKOUT (f_vco = f_clkin * CLKFBOUT_MULT)
.DIVCLK_DIVIDE (1), // Divide amount for all CLKOUTs (f_vco/f_allclkout = DIVCLK_DIVIDE)
.CLKOUT0_DIVIDE (10), // Divide amount for CLKOUT0 (f_clkout0 = f_vco/CLKOUT0_DIVIDE)
.CLKIN1_PERIOD (3.33) // Input clock period specified in nS.
) pll_inst (
.RST(reset),
.CLKFBDCM(1'b0),
.CLKFBIN(),
.CLKINSEL(1'b1),
.CLKIN1(clk_in1),
.CLKFBOUT(),
.CLKOUT0(clk_out1),
.LOCKED(locked)
);
endmodule
```
上述代码展示了如何利用 PLL 原语来进行基本的输入输出时钟配置[^1]。注意 `CLKIN1_PERIOD` 参数应根据实际使用的外部晶振频率调整,例如对于一个周期为 3.33 ns 的信号,则表示其工作于约 300 MHz 频率下。
此外,还需要确保所选器件支持指定版本的 PLL 构建模块以及相应的属性设定范围。更多细节可参阅官方文档获取最新指导信息。
阅读全文