Matplotplusplus绘图库的引用

一 Matplot++绘图库简介

Matplot++作为C++的一个优秀可视化库,可绘制出高质量的可用于出版的图表,同时也可以应用C++的后端功能,提供几十种绘图类型,几乎囊括了常见出版要求的绘图种类。其默认颜色系也是使用了Matlab的parula颜色条,色彩使用更加鲜明和直观。更多详细内容可参考:Matplot++官网

值得注意的是,Matplot++本身不具有显示功能,它是通过调用gnuplot实现画图的一个C++数据显示库,gnuplot是一个命令行交互式绘图工具

二 gnuplot下载与安装

gnuplot是一个命令驱动的交互式函数绘图程序,一款适用于Linux,OS / 2,MS Windows,OSX,VMS和许多其他平台的便携式命令行驱动图形工具。源代码受版权保护,但免费分发(即,您不必为此付费)。

官网:gnuplot homepage

gnuplot homepage

注意:为了实现在命令窗口(CMD)下画图,我们需要配置一下系统环境变量:自定义安装目录\gnuplot\bin

三 Matplot++下载与使用

3.1在官网找到Matplot++开源项目的地址和下载地址

官网地址:Home - Matplot++

3.2下载最新的发行版和源代码

你可以选择自己编译源代码,也可以选择发布的二进制(win32和win64)静态库。编译方法可参考官方文档(英文),有机会我后面一会专门出实战使用方法本次只使用二进制静态库

3.3安装matplotplusplus-1.1.0-win64.exe

默认安装到:C:\Program Files\matplotplusplus 1.1.0,安装后的内容如下:

3.4新建VS项目并引用Matplot++静态库

注意:Matplot++是基于最新的C++指令集规范编写的,所以必须保证C++编译器默认支持C++17级以上规范。因此,使用MSVC也要能够支持C++17的版本,我本次采用的是VS2019专业版。

  • 新建控制台应用程序:空项目testmatplot,添加cpp文件lineplots.cpp

  • 测试代码如下:
#include <cmath> 
#include <matplot/matplot.h> 
int main() 
{ 
    using namespace matplot; 
    auto [X, Y] = meshgrid(iota(-8, .5, +8)); 
    auto Z = transform(X, Y, [](double x, double y) 
        { double eps = std::nextafter(0.0, 1.0); 
           double R = sqrt(pow(x, 2) + pow(y, 2)) + eps; 
            return sin(R) / R; } ); 
    mesh(X, Y, Z); 
    show();// 需要调用show才能显示 return 0; 
}

四 配置matplot++静态库(配置方法可以参照其他博文

我的配置如下:

外部包含目录:C:\Program Files\matplotplusplus 1.1.0\include

库目录:C:\Program Files\matplotplusplus 1.1.0\lib;C:\Program Files\matplotplusplus 1.1.0\lib\Matplot++

库文件:nodesoup.lib;matplot.lib

注意:不论是release还是debug版都能编译通过,前提是环境配置一致且正确。

### 解决方案概述 DRC NSTD-1 错误提示表明,在FPGA设计中,有部分逻辑端口未指定具体的I/O标准(`IOSTANDARD`),而是使用默认值 `DEFAULT`。这种设置可能导致硬件行为不可预测,甚至可能引发信号完整性问题或设备损坏[^1]。 为了消除这一警告并提高设计的可靠性,需为涉及的所有逻辑端口显式指定合适的 `IOSTANDARD` 值。以下是具体方法: --- ### 方法一:通过 Vivado GUI 设置 I/O 标准 可以利用 Vivado 的图形化界面完成 I/O 标准配置: 1. 打开 **Implementation** 流程下的 **I/O Planning** 工具。 2. 定位到报错提到的具体端口列表(如 `W_data_i_0[31:0]`, `W_wren_i_0`, `PL_CLK`, `dma_start[0]`, 和 `dma_rstn[0]`)。 3. 右键点击目标端口,选择 **Set Properties** 或者双击进入属性编辑器。 4. 将 `IOSTANDARD` 属性修改为目标板卡支持的标准(例如 LVCMOS18, HSTL_I_DCI 等)。这些值通常由开发板手册提供[^2]。 --- ### 方法二:通过 Tcl 脚本批量设定 I/O 标准 如果项目规模较大或者需要自动化处理,则可以通过编写 Tcl 脚本来统一管理所有端口的 I/O 配置。以下是一个示例脚本片段: ```tcl # 设定特定端口的 IOStandard set_property IOSTANDARD LVCMOS18 [get_ports {W_data_i_0[*]}] set_property IOSTANDARD LVCMOS18 [get_ports W_wren_i_0] set_property IOSTANDARD DIFF_HSTL_I_DCI [get_ports PL_CLK] # 对于其他端口重复上述操作... ``` 将以上代码保存至 `.tcl` 文件,并将其作为实现阶段的一个预挂钩步骤加载。这样可以在每次重新编译时自动应用所需的更改。 #### 如何添加预挂钩? 执行如下命令即可将自定义TCL文件挂载到bitstream生成流程之前: ```tcl add_files -fileset constrs_1 -norecurse your_custom_io.tcl set_property STEPS.WRITE_BITSTREAM.ARGS.PRE_HOOK your_custom_io.tcl [get_runs impl_1] ``` --- ### 方法三:忽略错误(不建议) 尽管强烈反对忽视此类问题,但如果确实希望暂时绕过此检查点而不修正实际物理层参数的话,可通过降低其严重级别来达成目的: ```tcl set_property SEVERITY {Warning} [get_drc_checks NSTD-1] ``` 需要注意的是,这种方法仅适用于调试期间快速验证功能正确性的场景;最终产品发布前仍应彻底解决问题以保障长期稳定性与安全性。 --- ### 总结 综上所述,最理想的解决方案是从根本上去除潜在风险源——即明确定义每一个外部接口所遵循的确切电气特性描述符(IO Standards),从而杜绝因误解而导致的各种隐患发生可能性。同时也要记得定期复查更新后的约束条件是否仍然满足当前环境需求变化情况。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值