FPGA随笔
FGPA
整体过程
编写 Verilog (.v) 文件: |
veirlog语言
input/output 参数默认是wire类型。
wire : 组合逻辑,不涉及时序,当电路变化时,跟着变化
reg : 用于时序逻辑,当电路变化时,要等到下一个时钟才变化。
所以 assign 赋值要比在always中赋值快一个周期。
工具
yosys: 综合工具。
1. 启动 Yosys: |
nextpnr-gowin: 实现工具
openFPGALoader: 烧录工具。
高云IDE启动过程
LD_PRELOAD=/usr/lib/libfreetype.so /opt/Gowin_V1.9/IDE/bin/gw_ide
使用vscode开发环境
OSS CAD Suite –> Lushay Code(vscode插件) -> 右下角 fpga toolchain
Verilog-HDL 语法高亮
iverilog 仿真
- iverilog -o wave led_demo_tb.v led_demo.v
- vvp -n wave -lxt2
- gtkwave wave.vcdv
IP核
CMT clock manager tiles
1个CMT包含一个MMCM和1个PLL。
MMCM
PPL锁相环
graph LR |
N:前置分频计数器
PFD:相位频率检测器
Charge Pump:电荷泵
Loop Filter:环路滤波器
VCO:压控振荡器
M:反馈乘法器
K,V:后置分频器
电路原理介绍:
首先Fin输入时钟,进入N预分频单元,出来的是FREF参考时钟,进入PFD频率相位检测电路,检测VCO反馈回来的时钟信号与参考时钟进行比较,然后将比较结果送入Charge,能得到一个电压信号,电压信号经过一个环路滤波器后,就是一个比较稳定的电压信号,这电压信号再来控制VCO压控振荡器,从来产生一个时钟信号Fvco,再次经过M的一个倍频,输入到PFD,这里就是一个环路反馈,不断调整达到一个平衡。当PFD=M就稳定下来,稳定下来之前需要一定时间。
单端口RAM
输入只有一组数据线和一组地址线,只有一个时钟,读写共用地址线。
输出只有一个端口
所以单端口RAM读写操作不能同时进行
伪双端口RAM
输入只有一组数据线,两组地址线,两个时钟。
两个输出端口共用输出端口
所以一个端口只读,另一个端口只写,但写入和读取时钟可以不同,且位宽比可以不是1:1,即同时写A与读B可以速率不同。
双端口RAM
输入有两组地址线和两组数据线,两个时钟。
输出有两个分别的数据线
所以双端口RAM两个端口都可以分别读写,彼此互不干扰
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ruomio's electroic note!
