FPGA的专用时钟管脚CCLK的控制

项目场景:

在运用的过程中需要去操作到FLASH的时候
例如 1:将数据存放到FLASH中或者取出来
2:通过SPI去实现逻辑程序的更新

问题描述

在项目开始的时候由于不知道FPGA和FLASH直接的SPI时钟管脚是用的CCLK时钟管脚,导致一直没有办法去操作FLASH中的数据。返回去查看原理图的时候发现管脚是专用时钟管脚,查阅XILINX的资料 UG470发现需要用 STARTUPE2 原语进行“使能”才可以进行操作

原因分析:

根据UG470文件描述CCLK为专用时钟管脚,当作普通管脚使用的时候需要进行使能。文件对原语的描述如下:
在这里插入图片描述
在这里插入图片描述

解决方案:

其中CCLK需要设置为 inout 类型,输入连接到 STARTUPE2 中,输出由逻辑自己实现控制

STARTUPE2 的控制如下就行:

STARTUPE2 #(
.PROG_USR(“FALSE”), // Activate program event security feature. Requires encrypted bitstreams.
.SIM_CCLK_FREQ(0.0) // Set the Configuration Clock Frequency(ns) for simulation.
)
STARTUPE2_inst (
.CFGCLK ( ), // 1-bit output: Configuration main clock output
.CFGMCLK ( ), // 1-bit output: Configuration internal oscillator clock output
.EOS ( ), // 1-bit output: Active high output signal indicating the End Of Startup.
.PREQ ( ), // 1-bit output: PROGRAM request to fabric output
.CLK ( 0 ), // 1-bit input: User start-up clock input
.GSR ( 0 ), // 1-bit input: Global Set/Reset input (GSR cannot be used for the port name)
.GTS ( 0 ), // 1-bit input: Global 3-state input (GTS cannot be used for the port name)
.KEYCLEARB ( 1 ), // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM)
.PACK ( 1 ), // 1-bit input: PROGRAM acknowledge input
.USRCCLKO ( cclk ), // 1-bit input: User CCLK input
// For Zynq-7000 devices, this input must be tied to GND
.USRCCLKTS ( 0 ), // 1-bit input: User CCLK 3-state enable input
// For Zynq-7000 devices, this input must be tied to VCC
.USRDONEO ( 1 ), // 1-bit input: User DONE pin output control
.USRDONETS ( 1 ) // 1-bit input: User DONE 3-state enable output
);

### FPGA开发板时钟信号引脚配置方法 对于Xilinx FPGA而言,必须通过片上的专用时钟输入引脚(如MRCC或SRCC)来引入外部时钟信号[^1]。为了确保时钟信号能够被正确识别并用于设计中的各个模块,在硬件描述语言(HDL)文件以及约束文件中都需要做相应的设置。 #### 定义时钟端口 在Verilog或其他HDL源码里定义一个专门接收时钟信号的输入端口: ```verilog module top_module ( input wire clk, // 外部时钟信号连接到此端口 ... ); ``` #### 设置UCF/XDC约束文件 为了让工具知道哪个物理引脚对应于上述`clk`端口,并指定其电气特性,需编辑用户约束文件(User Constraints File)。如果是较老版本的设计可能使用`.ucf`格式;而对于Vivado等现代IDE,则推荐采用`.xdc`格式。 下面是一个简单的例子,假设目标器件的一个特定管脚编号为P57,并且期望该时钟具有20ns的最大抖动容限: ```tcl # XDC 文件片段 set_property PACKAGE_PIN P57 [get_ports {clk}] # 将顶层实体的 'clk' 端口映射至实际封装位置 set_property IOSTANDARD LVCMOS33 [get_ports {clk}] # 设定I/O标准为LVCMOS 3.3V电平 create_clock -name sys_clk -period 20.000 [get_ports {clk}] # 创建名为'sys_clk' 的全局时钟对象,周期设为20纳秒 (即50 MHz) ``` 以上操作不仅指定了具体的引脚分配还创建了一个逻辑名称叫做`sys_clk`的时钟域,后续可以在综合、实现过程中利用这个命名来进行更精细的时间分析和优化工作。 另外值得注意的是,在某些情况下如果需要处理多个不同频率的时钟源,则可以重复上面的过程分别为它们建立各自的时钟网络结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值