当前位置: 首页 > news >正文

初识verilog HDL

为什么选择用Verilog HDL开发FPGA???

  硬件描述语言(Hardware Descriptipon Lagnuage,HDL)通过硬件的方式来产生与之对应的真实的硬件电路,最终实现所设计的预期功能,其设计方法与软件不同,因此也就意味着描述的各个功能之间可以和硬件一样实现真正的并行互动。将这种语言成为硬件描述语言而非硬件语言的原因是:这种语言是用来描述我们设计的硬件所要实现的功能,而不是直接对硬件进行设计。

  目前常用的语言是  verilog HDL 和  VHDL。对比而言,

  VHDL和Verilog 相比,VHDL语法比Verilog严谨。VHDL语法比Verilog冗长,所以建议学习Verilog做为FPGA开发语言。

  Verilog inout端口

  

module  test
(input    wire    sel         ,input    wire    data_out    ,inout    wire    data_bus    ,input    wire    data_in
);assign data_in  = data_bus    ;assign data_bus = (sel == 1'b1)?data_out:1'bz; endmodule

Verilog中的系统任务和系统函数

  verilog语言中定义了一些任务和函数,用于完成一些特殊功能,它们称为系统任务和系统函数,这些函数大多数只能在TB仿真中使用,使我们更方便验证。

    

·timescale 1ns/1ns   //`timescale 表示时间尺度预编译指令   1ns/1ns  表示 时间单位  时间精度

时间单位和时间精度由值1、10和100以及单位s、ms、us、ns、ps、fs组成。

时间单位定义了仿真过程与时间相关量的单位。仿真中使用“#数字” 表示延时 #10 表示延时10ns

  主要函数如下:

  1、 $display("%b + %b = %d",a,b,c);

`timescale 1ns/1nsmodule tb_test();reg [3:0]    a    ;reg [3:0]    b    ;reg [3:0]    c    ;initialbegin$display("hello");$display("Embedfire");a = 4'd5    ;b = 4'd6    ;c = a + b   ;#100;$display("%b + %b = %d",a,b,c);endendmodule

2 $write输出信息

`timescale 1ns/1nsmodule  tb_test();reg [3:0]    a    ;reg [3:0]    b    ;reg [3:0]    c    ;initialbegin$write("hello")    ;$write("Embedfire") ;a = 4'd5    ;b = 4'd6    ;c = a + b   ;#100;$write("%b + %b = %d\n",a,b,c);endendmodule

3 $strobe输出信息

`timescale 1ns/1nsmodule tb_test();reg [3:0]    a    ;reg [3:0]    b    ;reg [3:0]    c    ;initialbegin$strobe("strobe:%b + %b = %d",a,b,c);a = 4'd5        ;#display("display:%b + %b = %d",a,,b,c);b = 4'd6    ;c = a + b    ;endendmodule

4 $monitor用于持续监测变量

`timescale 1ns/1nsmodule tb_test();reg [3:0]    a    ;reg [3:0]    b    ;reg [3:0]    c    ;initialbegina = 4'd5    ;#100    ;b = 4'd6    ;#100    ;c = a + b    ;endinitialbegin$monitor("%b + %b = %d ",a,b,c)    ;endendmodule

5 $stop用于暂停仿真,$finish用于仿真结束

`timescale 1ns/1nsmodule tb_test();initialbegin$display("hello")                ;$display("Embedfire")            ;    #100                             ;#display("Stop Simulation")      ;$stop    ;$display("Continue Simulation")  ;#100    ;$display("Finish Simulation")    ;#finish    ;  endendmodule

6  $time为时间函数,返回64位当前仿真时间;$random用与产生随机函数,返回随机数。

`timescale 1ns/1nsmodule tb_test();reg [3:0]    a    ;always # 10 a = $random    ;initialbegin$monitor("a = %d,time :%d",a,$time)    ;endendmodule

http://www.lryc.cn/news/519410.html

相关文章:

  • VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署
  • Notepad++上NppFTP插件的安装和使用教程
  • Kotlin | Android Provider 的实现案例
  • 频域自适应空洞卷积FADC详解
  • Edge浏览器内置的截长图功能
  • GAN的应用
  • Math Reference Notes: 希腊字母表
  • 高通,联发科(MTK)等手机平台调优汇总
  • Rust语言使用iced实现简单GUI页面
  • 使用wav2vec 2.0进行音位分类任务的研究总结
  • 25/1/11 嵌入式笔记<esp32> 初入esp32
  • 基于SMT32U575RIT单片机-中断练习
  • 在Django的Serializer的列表数据中剔除指定元素
  • 我喜欢的数学题
  • Redis解决热key问题
  • 【git】-2 分支管理
  • Win11+WLS Ubuntu 鸿蒙开发环境搭建(二)
  • Meilisearch ASP.Net Core API 功能demo
  • 程序员独立开发竞品分析:确定网站使用什么建站系统
  • selenium+pyqt5自动化工具总结
  • docker GPU安装
  • hutool糊涂工具通过注解设置excel宽度
  • Three.js教程015:全面讲解Three.js的UV与应用
  • IOS界面传值-OC
  • 阿里mod_asr3.0集成webrtc静音算法
  • [Git] git pull --rebase / git rebase origin/master
  • Leetcode​​​​​​​3270:求出数字答案
  • 第十一章 施工监测
  • Python爬虫应用领域
  • 软件架构考试基础知识 002:进程的状态与其切换