前言
逻辑短文系列第三篇,显然,没有规律,让我随时可以输出一些东西,而不必想文章的主题,放在哪一篇中的哪一块等,自由。
逻辑设计中复位的稳妥处理方法?
逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗?
这一片就更加的简短了,只讲一个知识点,或者记录一个知识点,因为后面我也可能会忘掉,没关系,手熟即可。
下次想用了,且忘了,可以再翻看一下。
正文
同样,以Xilinx的例程,wavegen为例,其顶层模块的端口为:
`timescale 1ns/1ps
module wave_gen (
input clk_pin_p, // Clock input (from pin)
input clk_pin_n, // - differential pair
input rst_pin, // Active HIGH reset (from pin)
// RS232 signals
input rxd_pin, // RS232 RXD pin
output txd_pin, // RS232 RXD pin
// Loopback selector
input lb_sel_pin, // Loopback selector
// DAC output signals
output spi_clk_pin, // Serial clock
output spi_mosi_pin, // Serial data
output dac_cs_n_pin, // DAC chip select (active low)
output dac_clr_n_pin, // DAC clear (or reset - active low)
// LED outputs
output [7:0] led_pins // 8 LED outputs
);
//......
endmodule
这些都是端口,如:
黑色框周围的端口,是FPGA内外界交互的桥。
端口在英文中叫port,vivado具有tcl console界面,如何使用tcl,使用与port有关的语法呢?
端口自然存在于顶层模块,
- 第一个获取所有端口的命令:
get_ports
这时候工程就会响应如下内容:
clk_pin_n clk_pin_p dac_clr_n_pin dac_cs_n_pin lb_sel_pin led_pins[0] led_pins[1] led_pins[2] led_pins[3] led_pins[4] led_pins[5] led_pins[6] led_pins[7] rst_pin rxd_pin spi_clk_pin spi_mosi_pin txd_pin
这是顶层模块的所有ports。
- 如果要看所以的输入端口呢?
最简单的也还是:
all_inputs
工程响应如下内容:
clk_pin_n clk_pin_p lb_sel_pin rst_pin rxd_pin
- 获取所有输出端口:
all_outputs
工程响应如下内容:
dac_clr_n_pin dac_cs_n_pin led_pins[0] led_pins[1] led_pins[2] led_pins[3] led_pins[4] led_pins[5] led_pins[6] led_pins[7] spi_clk_pin spi_mosi_pin txd_pin
- 获取ports的属性:
如何获取ports的属性呢?我们使用一个变量替换的语法:
在变量替换,$使用在变量名之前,这将返回该变量的内容。
一个简单的例子为一个值设置为变量并打印如下所示。
set a 3
puts $a
返回:
3
依照这个简单的例子,我们先用变量替换任意一个端口,如下:
set inst0_clk_pin_n [get_ports clk_pin_n]
替换成功了吗?
打印出来看看:
puts $inst0_clk_pin_n
之后使用:
report_property $inst0_clk_pin_n
- 搜索具有关键字的端口:
可以使用如下命令:
get_ports *clk*
响应如下:
clk_pin_n clk_pin_p spi_clk_pin
如果要获取输入端口中具有关键字的端口:
get_ports -filter {DIRECTION == IN} *clk*
响应如下:
clk_pin_n clk_pin_p
同理输出端口:
get_ports -filter {DIRECTION == OUT} *clk*
响应如下:
spi_clk_pin
结尾
内容很简单,总结起来就是:
1. 获取所有端口:get_ports
2. 所有输入端口:all_inputs
3. 所有输出端口:all_outputs
4. 变量替换: set inst [get_ports clk_pin_n]
5. 报告端口属性:report_property $inst
6. 获取具有关键字的端口:get_ports *clk*
7. 获取具有关键字的输入:get_ports -filter {DIRECTION == IN} *clk*
8. 获取具有关键字的输出:get_ports -filter {DIRECTION == OUT} *clk*
还不快去试试?