Linux 系统下 “Verilog” 编程配置

这篇具有很好参考价值的文章主要介绍了Linux 系统下 “Verilog” 编程配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


简介


Verilog HDL

Verilog HDL 是一种用于设计数字电路的硬件描述语言,它可以用来描述数字电路的功能和结构,并且可以被编译器转换成可以在现实世界中运行的电路。

Verilog HDL语言 由一系列的关键字、表达式和语句组成,这些元素可以用来描述电路的输入、输出和内部状态。


Iverilog

Iverilog 是一种基于 Verilog HDL 的综合工具,用于将 Verilog HDL代码 转换成可以在现实世界中运行的硬件电路。Iverilog 使用一种叫做 ”门级综合” 的技术来生成电路模型,它可以将 Verilog HDL代码 转换成门级电路模型,也可以将其转换成可以在 FPGA 或其他硬件平台上运行的实际电路。

Iverilog 还提供了一些其他的功能(例如:模拟和验证电路的功能以及自动化测试平台的集成等),这些功能使得 Iverilog 成为数字电路设计领域的一种非常有用的工具。


Gtkwave

Gtkwave 是 Xilinx 公司开发的一种用于设计和验证 GTX(通用图形处理器)的工具,同时也可以用于 iverilog 仿真和查看仿真波形。它提供了一个简单易用的界面,可以帮助用户快速设计和验证 GTX 芯片,并可以自动生成用于 FPGA 或 ASIC 实现的代码。它还支持多种硬件描述语言,如 Verilog HDL、VHDL 等,方便用户将设计转换为可实现的硬件电路。

运用 gtkwave 软件进行 iverilog 仿真时,用户可以设置仿真参数,如仿真时间、仿真精度等,并可以选择不同的模块进行仿真。仿真结果会以波形的形式显示在软件界面上,用户可以通过调整波形的显示方式和参数来更好地观察和理解仿真结果。同时,gtkwave 软件还提供了多种工具,如波形缩放、标记、测量等,帮助用户更方便地分析和验证设计。


环境搭建


软件的安装

(1)Iverilog 的安装

  • 在 Linux 系统下,打开终端并执行以下命令进行安装。
sudo apt-get install iverilog
  • 安装成功后,执行 man iverilog 命令可以查看 iverilog 软件的使用方法,如下图所示。

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发

注:安装 ivreilog 软件的同时会安装 vpp 软件,该软件是 Verilog 的仿真软件。

(2)GTKWave 的安装

  • 在 Linux 系统下,打开终端并执行以下命令进行安装。
sudo apt-get install gtkwave
  • 安装成功后,执行 man gtkwave 命令可以查看 gtkwave 软件的使用方法,如下图所示。

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发

注:gtkwave 是一款功能强大的 GTX 设计和验证工具,同时也是 iverilog 仿真和波形查看的有力工具,为用户提供了方便、高效的设计和验证环境。


Vim 之 Verilog 语法高亮配置

(1)基本配置

  • 打开 Linux 终端,执行以下命令对 VIM 进行配置。
vim ~/.vimrc
  • 编辑 .vimrc 文件,添加以下内容并保存退出。
set nocompatible "不兼容vi
syntax on  "语法高亮度显示 
set noerrorbells " 不让vim发出讨厌的滴滴声 
set shortmess=atI " 启动的时候不显示那个援助索马里儿童的提示 
set t_Co=256  "开启256色支持
set hlsearch  "搜索设置高亮
colorscheme desert "配色方案
set background=dark "配置主题整体的色调,只有两个选择:dark和light(暗色调和亮色调)
highlight Function cterm=bold,underline ctermbg=red ctermfg=green "color set
set nu  "显示行号
set relativenumber "显示相对行号
set cursorcolumn "add cursor in column
set cursorline "add cursor in line 
"set guifont=Monospace\ 16 "gui style
set guifont=Courier_new:h16
set lines=35 columns=118 "其中lines是窗口显示的行数,columns是窗口显示的列数
winpos 200 100 "后面两个参数指的自屏幕左上角像素值参考位置
set tabstop=4 "tab键相当于4个空格键
set expandtab "來將 tab 转成 space  combine with tabstop
set shiftwidth=4 "换行自动变为空格
set autoindent "设置自动缩进  自动缩进,当你第一行敲 tab + 文字 回车后 下一行自动给你加个 tab 
set backspace=2 "enable backspace
set novisualbell "不要闪烁
set laststatus=2 "启动显示状态行
set encoding=utf-8 "文件编码

inoremap ( ()<ESC>i
inoremap [ []<ESC>i

"ban up and also keys 
imap <Up> <Nop>
imap <Down> <Nop>
imap <Left> <Nop>
imap <Right> <Nop>
nmap <Up> <Nop>
nmap <Down> <Nop>
nmap <Left> <Nop>
nmap <Right> <Nop>

imap jk <Esc>  "在编辑模式下使用jk替代ESC进入命令模式
nmap ,l ^
nmap ,r $

"进行版权声明的设置
"添加或更新头
map <F3> :call TitleDet()<cr>'s
function AddTitle()
    call append(0,"/*=============================================================================")
    call append(1,"#")
    call append(2,"# Author: meng  - email@vip.qq.com")
    call append(3,"#")
    call append(4,"# QQ : xxxxxxxxx ")
    call append(5,"#")
    call append(6,"# Last modified: ".strftime("%Y-%m-%d %H:%M"))
    call append(7,"#")
    call append(8,"# Filename: ".expand("%:t"))
    call append(9,"#")
    call append(10,"# Description: ")
    call append(11,"#")
    call append(12,"=============================================================================*/")
    echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf
"更新最近修改时间和文件名
function UpdateTitle()
    normal m'
    execute '/# *Last modified:/s@:.*$@\=strftime(":\t%Y-%m-%d %H:%M")@'
    normal ''
    normal mk
    execute '/# *Filename:/s@:.*$@\=":\t\t".expand("%:t")@'
    execute "noh"
    normal 'k
    echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction
"判断前10行代码里面,是否有Last modified这个单词,
"如果没有的话,代表没有添加过作者信息,需要新添加;
"如果有的话,那么只需要更新即可
function TitleDet()
    let n=1
    "默认为添加
    while n < 10
        let line = getline(n)
        if line =~ '^\#\s*\S*Last\smodified:\S*.*$'
            call UpdateTitle()
            return
        endif
        let n = n + 1
    endwhile
    call AddTitle()
endfunction

(2)加载高亮文本

  • 在 Linux 系统的家目录下的 .vim 文件夹中新建 syntaxftdelect 文件夹,依次执行以下命令。
mkdir ~/.vim/ftdelect
mkdir ~/.vim/syntax
  • ftdelect 目录下新建一个名为 sv.vim 的文本文件,并编辑添加以下内容。
au BufReaad,BufNewFile *.sv set filetype=systemverilog
  • 下载 Verilog 语法高亮文件,下载后重命名为 systemverilog.vim ,并放入到 syntax 目录下,重启 VIM 后便配置成功,效果如下图所示。

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发


简单的计数器示例


计数器程序的编写

(1)在任意目录下,创建一个名为 count.v 的仿真文件,并编写 Verilog HDL 计数器程序,该程序的具体内容如下。

module counter(out, clk, reset);

parameter WIDTH = 8;

input clk, reset;
output [WIDTH - 1 : 0] out;

reg [WIDTH - 1 : 0] out;
wire clk, reset;

always @(posedge clk)
        out <= out + 1;

always @reset begin
        if (reset)
                assign out = 0;
        else
                deassign out;
end
endmodule

(2)创建一个名为 sim_count.v 的测试文件,并编写 testbench,该 testbench 的内容如下所示。

`timescale 1ns/1ns

module sim_count;

reg reset = 0;

initial begin
	#17 reset = 1;
	#11 reset = 0;
	#29 reset = 1;
	#11 reset = 0;
	#250 $stop;
end

reg clk = 0;
always #5 clk = !clk;

wire [7 : 0] value;
counter cqupthao(value, clk, reset);

initial begin
	$monitor("When time is %t (ns), value = %h (%0d)" , $time, value, value);
end

initial begin
        $dumpfile("sim_count.vcd");
        $dumpvars(0, sim_count);
end
endmodule

其中,$dumpfile("sim_count.vcd") 中的 sim_count.vcd 为指定存储的文件名,$dumpvars(0, sim_count) 中的 sim_count 为模块名。


仿真测试

  • 方式一

(1)将以上的仿真文件 count.v 和测试文件 sim_count.v 打包成一个 vvp 文件,在 Linux 终端执行以下命令。

iverilog -o count.vvp count.v sim_count.v 

(2)将打包成的 vvp 文件转换为 vcd 文件提供给 gtkwave 软件使用,在终端中执行以下命令。

vvp -n count.vvp -vcd

正确运行以上命令后,会输出如下图所示的结果。

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发

注意:此刻,该项目的目录下有 count.v count.vvp sim_count.v sim_count.vcd 四个文件。

(3)成功转换文件之后将此文件导入 gtkwave 软件中,在终端中执行以下命令。

gtkwave sim_count.vcd

(4)gtkwave 软件运行成功后,点击下图中左上角的 cqupthao,会出现对应的信号。

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发

(5)选中信号后,鼠标右键点击 Insert 后,就能看见如下图所示的波形!

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发


  • 方式二

(1)在 Linux 终端执行以下命令。

iverilog -o simname count.v sim_count.v 

注:在参数 -o name 中,simname 是输出的文件名,输出的文件是一个可执行文件。

(2)执行该文件后会出现 .vcd 波形文件 vcd ,提供给 gtkwave 软件使用,在终端中执行以下命令。

./simname

正确运行以上命令后,会输出如下图所示的结果。

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发

注意:此刻,该项目的目录下有 count.v sim_count.v sim_count.vcd simname 四个文件。

(3)成功转换文件之后将此文件导入 gtkwave 软件中,在终端中执行以下命令。

gtkwave sim_count.vcd

(4)gtkwave 软件运行成功后,点击下图中左上角的 cqupthao,会出现对应的信号。

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发

(5)选中信号后,鼠标右键点击 Insert 后,就能看见如下图所示的波形!

Linux 系统下 “Verilog” 编程配置,FPGA系列,软件工具的使用系列,linux,学习,fpga开发


  • 参考博文 :linux 运行verilog,Linux | “搭建verilog学习环境”

  • 参考博文 :linux中vim/gvim的安装与verilog,systemverilog语法高亮显示文章来源地址https://www.toymoban.com/news/detail-605776.html

到了这里,关于Linux 系统下 “Verilog” 编程配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog编程:位数值比较器 FPGA

    Verilog编程:位数值比较器 FPGA 在FPGA(现场可编程门阵列)的数字电路设计中,位数值比较器是一个重要的组件。位数值比较器用于比较两个二进制值的大小,并输出比较的结果。本文将介绍如何使用Verilog编程语言实现一个简单的位数值比较器,并演示相应的源代码。 首先,

    2024年04月14日
    浏览(37)
  • 中文编程开发语言工具编程实际案例:美发店会员管理系统软件编程实例

    中文编程开发语言工具编程实际案例:美发店会员管理系统软件编程实例 中文编程开发语言工具编程实际案例:美发店会员管理系统软件编程实例。 软件功能: 1、系统设置:参数设定,账号及权限设置,系统初始化,卡类型设置,积分清零等。 2、会员信息登记:可以刷卡

    2024年02月07日
    浏览(59)
  • 中文编程开发语言工具编程案例:计时计费管理系统软件连接灯控器编程案例

    计时计费管理系统软件连接灯控器 计时计费管理系统软件连接灯控器编程案例

    2024年02月07日
    浏览(55)
  • Verilog 编程实现 3-8 译码器 FPGA

    Verilog 编程实现 3-8 译码器 FPGA FPGA 是一种可重构的数字电路芯片,可用于实现各种逻辑电路。在 FPGA 中,我们可以使用 Verilog HDL(硬件描述语言)来编写数字电路设计。本篇文章将为您介绍如何使用 Verilog 实现基本的数字电路,即 3-8 译码器。 3-8 译码器是一种常用的数字电路

    2024年02月07日
    浏览(44)
  • Verilog编程:8线-3线优先编码器FPGA

    Verilog编程:8线-3线优先编码器FPGA 基于FPGA的数字电路设计是当前领域中的关键技术之一,因为这种设计具有高速、可编程、可重构等优点。在数字电路设计中,编码器是常见的模块,尤其是8线-3线优先编码器,可以实现将八个输入信号中最先出现的一个编码输出到三位二进制

    2024年02月08日
    浏览(44)
  • 【FPGA】Verilog编程实现SDRAM读写(一) ----- 初识SDRAM

    SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器。同步、动态、随机是其性能特点的外在说明: 同步(Synchronous )是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准 动态(Dynamic )是指存储阵列 需要不断的刷新来保证数据不丢失 随机(

    2023年04月08日
    浏览(47)
  • Verilog实现FPGA可编程电路中的RAM存储器

    Verilog实现FPGA可编程电路中的RAM存储器 在FPGA可编程电路的设计中,RAM存储器通常被广泛使用。而手写RAM存储器则可以提供更加灵活、高效的设计方案。本文将介绍如何使用Verilog语言来手写FPGA中的RAM存储器。 首先,我们需要确定RAM存储器的大小和宽度。假设我们需要实现一个

    2024年02月04日
    浏览(58)
  • 中文编程开发语言工具应用案例:ps5体验馆计时收费管理系统软件

    ps5体验馆计时收费管理系统软件 软件部分功能: 1、计时计费功能:只需点开始计时即可,时间直观显示 2、商品管理功能:可以管理饮料等商品 3、会员管理功能:支持只用手机号作为卡号使用。 4、定时提醒功能:定时时间可以自由设定,到时间电脑会发出提醒声音,并改

    2024年02月08日
    浏览(48)
  • 【Linux操作系统】深入了解系统编程gdb调试工具

    在软件开发过程中,调试是一个非常重要的步骤。无论是在开发新的软件还是维护现有的代码,调试都是解决问题的关键。对于Linux开发者来说,GDB是一个非常有用的调试工具。在本文中,我们将探讨Linux中使用GDB进行调试的方法和技巧。 GDB是GNU调试器的缩写,是一个功能强

    2024年02月14日
    浏览(49)
  • 基于FPGA的四位数码管显示按键计数器设计(verilog编程)

    软件:Vivado 2022.2 硬件:BASYS 3 设计描述:通过开发板上的四个按键,按下一次记数加一,分别由四个数码管从左到右分别显示四个按键记数情况。 例: 1.初始值为0000,意为无记数 2.当按下第一个按键,记数加一,数码管显示1000 3.再次按下一第一个按键,记数加一,数码管显

    2024年02月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包