前言

逻辑短文系列第三篇,显然,没有规律,让我随时可以输出一些东西,而不必想文章的主题,放在哪一篇中的哪一块等,自由。

逻辑设计中复位的稳妥处理方法?

逻辑设计中需要显式地使用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

这些都是端口,如:

TCL中关于管脚(Ports)的一些使用方法?_原语

黑色框周围的端口,是FPGA内外界交互的桥。

端口在英文中叫port,vivado具有tcl console界面,如何使用tcl,使用与port有关的语法呢?

端口自然存在于顶层模块,

  1. 第一个获取所有端口的命令:
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。

  1. 如果要看所以的输入端口呢?

最简单的也还是:

all_inputs

工程响应如下内容:

clk_pin_n clk_pin_p lb_sel_pin rst_pin rxd_pin
  1. 获取所有输出端口:
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
  1. 获取ports的属性:

如何获取ports的属性呢?我们使用一个变量替换的语法:

在变量替换,$使用在变量名之前,这将返回该变量的内容。

一个简单的例子为一个值设置为变量并打印如下所示。

set a 3
puts $a

返回:

3

依照这个简单的例子,我们先用变量替换任意一个端口,如下:

set inst0_clk_pin_n [get_ports clk_pin_n]

替换成功了吗?

打印出来看看:

puts $inst0_clk_pin_n

TCL中关于管脚(Ports)的一些使用方法?_显式_02

之后使用:

report_property $inst0_clk_pin_n

TCL中关于管脚(Ports)的一些使用方法?_处理方法_03

  1. 搜索具有关键字的端口:

可以使用如下命令:

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*

还不快去试试?