Intel Quartus在ubuntu18.04.4上的安装教程及问题解决及生成blif

原创
2020/09/27 13:19
阅读数 658

首先去Intel的Quartus官网https://www.intel.cn/content/www/cn/zh/software/programmable/quartus-prime/overview.html找到下载界面 Intel的Quartus官网下载界面

然后选择版本和操作系统 选择版本和操作系统

点击下载 点击下载

注意这里有官方的问题解答和安装教程,建议看英文版的安装教程https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/quartus_install.pdf,介绍更加全面和详细 官方的问题解答和安装教程

有一点疑惑是问题解答说安装目录可以有空格,但是英文版的安装教程说不能有,很奇怪 官方解答说可以有空格 英文版安装教程说不能有空格

下载完解压,按照教程安装,然后启动(快捷图标和命令行都可以,根据英文版教程,用<installation-directory>/quartus/bin/quartus即可启动,我加了alias(2020.8.9:因为涉及到命令行及脚本,最终选择了用户变量$PATH),直接quartus启动),报错: quartus: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory 大概意思是说缺少这个libpng12.so.0,然后复制这个erro到谷歌,打开了第一个回答、第二个回答和第一个回答下面的子回答 子回答

第一个回答https://community.intel.com/t5/Programmable-Devices/Quartus-can-t-find-shared-library/td-p/161251是说他有libpng12.so.0但是没有识别到,可能路径不对,我locate我的libpng12.so.0发现在snap里面

zli@lizhen:~/altera_lite/15.1/quartus$ locate libpng12.so.0 
/opt/kingsoft/wps-office/office6/libpng12.so.0
/opt/kingsoft/wps-office/office6/libpng12.so.0.50.0
/snap/core/7270/lib/x86_64-linux-gnu/libpng12.so.0
/snap/core/7270/lib/x86_64-linux-gnu/libpng12.so.0.54.0
/snap/core/7270/usr/lib/x86_64-linux-gnu/libpng12.so.0
/snap/core/9665/lib/x86_64-linux-gnu/libpng12.so.0
/snap/core/9665/lib/x86_64-linux-gnu/libpng12.so.0.54.0
/snap/core/9665/usr/lib/x86_64-linux-gnu/libpng12.so.0
/snap/sublime-text/85/lib/x86_64-linux-gnu/libpng12.so.0
/snap/sublime-text/85/lib/x86_64-linux-gnu/libpng12.so.0.54.0
/snap/sublime-text/85/usr/lib/x86_64-linux-gnu/libpng12.so.0

第二个回答与第一个回答一样。第一个回答下面的子回答有一个是下载libpng16-16然后手动创建文件夹后ln过去https://askubuntu.com/questions/1093817/when-trying-to-install-crossover-deb-i-get-error-dependency-is-not-satisfiable,其余的子回答感觉很复杂的样子,没仔细看。但其实第三个主回答就有答案https://stackoverflow.com/questions/53403790/cannot-open-shared-object-file-libpng12-so-0,只不过当时觉得复杂看不懂。

然后我在最前面加了ubuntu18 再次搜索,一略而过觉得很复杂,但其实第一个回答就是刚才的第三个主回答。

我本想参照那个子回答用ln把snap中的libpng12.so.0 link过去,但灵机一动可以用ubuntu quartus install关键词再搜索一次,然后发现了这篇文章https://www.bitsnbites.eu/installing-intelaltera-quartus-in-ubuntu-17-10/

他说安装Qurtus需要用到linpng12,而ubuntu17没有,所以需要先安装。 image.png

我觉得ubuntu18也没有,于是返回刚才的搜索界面找到第一个回答https://stackoverflow.com/questions/53403790/cannot-open-shared-object-file-libpng12-so-0,sudo su以后运行回答提供的命令

wget -q -O /tmp/libpng12.deb http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.deb \
  && dpkg -i /tmp/libpng12.deb \
  && rm /tmp/libpng12.deb

再打开quartus就可以了。

####启示:1.不要看子回答,不相关;2.换搜索关键词的思路。

我用命令行打开后会报两个错误

zli@lizhen:~$./altera_lite/15.1/quartus$/bin/quartus
Gtk-Message: 16:29:40.101: Failed to load module "canberra-gtk-module"

(quartus:16485): Gtk-WARNING **: 16:29:40.608: Error loading theme icon 'window-close' for stock: Unable to load image-loading module: /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.so: /home/zli/altera_lite/15.1/quartus/linux64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.60)

第一个错误直接谷歌,按照https://askubuntu.com/questions/208431/failed-to-load-module-canberra-gtk-module执行

sudo apt-get install libcanberra-gtk-module

搞定。

第二个错误直接谷歌,按照http://www.stevesmuddlings.org/2015/09/test-post-1.html执行

cd <install_dir>/15.1/quartus/linux64
sudo mv libstdc++.so.6 libstdc++.so.6.quartus_distrib
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6

搞定。

装好后按照这个教程熟悉一下GUI界面:https://blog.csdn.net/Alexanderrr/article/details/51615254,注意文中所说的文件名要与module后面定义的实体名一致

如果碰到Warning (12125): Using design file test_for_blif.v, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project Info (12023): Found entity 1: test_for_blif是因为没有把文件添加到project里面,打开File把文件添加进去: 右击file选择添加

我写了一个一位全加器(笑)

module test_for_blif(
	input cin, input a, input b,
	output reg [1:0] s
	);
	
	always @ (*)
			s = a + b + cin;
			
endmodule

然后按照CAD_Flow0的教程一次就可以成功,修改完qsf文件后不用重启quartus,保存以下直接编译就行。这里给出before_optimize和after_lut_map(after complete optimization and tech-mapping)后的结果,还是很明显有区别的,after_lut_map(after complete optimization and tech-mapping)已经映射到了两个3LUT上去:

before_optimize:

.model test_for_blif
.inputs cin a b
.outputs s[0] s[1]

#g1 = Add0~synth
.names a b g1
10 1
01 1

#g1 = Add0~synth
#s[0] = Add1~synth
.names cin g1 s[0]
10 1
01 1

#g3 = Add0~synth
.names a b g3
11 1

#g1 = Add0~synth
#g4 = Add1~synth
.names cin g1 g4
11 1

#g3 = Add0~synth
#g4 = Add1~synth
#s[1] = Add1~synth
.names g3 g4 s[1]
00 0

.end

after_lut_map(after complete optimization and tech-mapping):

.model test_for_blif
.inputs cin a b
.outputs s[0] s[1]

#s[0] = Add1~synth
.names cin a b s[0]
100 1
010 1
001 1
111 1

#s[1] = Add1~synth
.names cin a b s[1]
110 1
101 1
011 1
111 1

.end

还需要注意一点的是根据论文Benchmarking Method and Designs Targeting Logic Synthesis for FPGAs 论文截图

在before_optimize和after_lut_map(after complete optimization and tech-mapping) 中间的after complete optimization还可以输出一次blif,但是CAD_Flow0的教程中并没有教这一步应该怎么做。

我猜测肯定是改为before_lut_map或者是after_optimize,前者不行,后者成功!这里给出after_optimize的结果,因为我这个只是一位全加器。逻辑简单,所以优化不优化都一样

after_optimize:

.model test_for_blif
.inputs cin a b
.outputs s[0] s[1]

#g1 = Add0~synth
.names a b g1
10 1
01 1

#g1 = Add0~synth
#s[0] = Add1~synth
.names cin g1 s[0]
10 1
01 1

#g3 = Add0~synth
.names a b g3
11 1

#g1 = Add0~synth
#g4 = Add1~synth
.names cin g1 g4
11 1

#g3 = Add0~synth
#g4 = Add1~synth
#s[1] = Add1~synth
.names g3 g4 s[1]
00 0

.end

#2020.7.26 在ubuntu 18.04.4下尝试Quartus 20.1、一个简单的一位全加器代码分别在before_optimize、after_optimize和after_lut_map可以生成对应的blif文件。

另外,CAD_Flow0的命令太老了,跑大例子跑不通,没有打开balckbox,所以复现论文Benchmarking Method and Designs Targeting Logic Synthesis for FPGAs的例子时是采用例子中的.ini中的命令来执行的。

只需要把CAD_Flow0中的命令全部去掉,改为:

set_global_assignment -name INI_VARS "cdb_ignore_error_for_rom_missing_mif=on;no_add_ops=on;dump_blif_with_blackboxes=on;dump_blif_before_optimize=on;abort_after_dumping_blif=on"即可。

after_optimize、after_lut_map只需要做相应更改即可。

cdb_ignore_error_for_rom_missing_mif=on 这条命令是针对rom的初始化来说的,如果verilog或者vhdl里面没有rom的话,这条命令可有可无。

no_add_ops=on 这条命令是有用的,实际测试有这条命令在after_optimize后生成的blif文件比没有这条命令生成的blif文件行数会减少。after_lut_map后也同样如此。

dump_blif_with_blackboxes=on 这条命令也是需要的,生成blackbox必须的,没有会报错。

备注:

生成blif的时候Quartus会报警告:Blif version of the design will not be functionally equivalent to original design because asynchronous secondary signal,不清楚为什么,板子原因?或者版本原因?

有些例子代码有问题,跑不通,具体见各电路说明的表格。

展开阅读全文
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部