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

初识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/1ns


module tb_test();

    reg [3:0]    a    ;
    reg [3:0]    b    ;
    reg [3:0]    c    ;

    initial
    begin
        $display("hello");
        $display("Embedfire");
        a = 4'd5    ;
        b = 4'd6    ;
        c = a + b   ;
        #100;
        $display("%b + %b = %d",a,b,c);
    end

endmodule

2 $write输出信息

`timescale 1ns/1ns


module  tb_test();

    reg [3:0]    a    ;
    reg [3:0]    b    ;
    reg [3:0]    c    ;

    initial
    begin
        $write("hello")    ;
        $write("Embedfire") ;
        a = 4'd5    ;
        b = 4'd6    ;
        c = a + b   ;
        #100;
        $write("%b + %b = %d\n",a,b,c);
    end


endmodule

3 $strobe输出信息

`timescale 1ns/1ns


module tb_test();

    reg [3:0]    a    ;
    reg [3:0]    b    ;
    reg [3:0]    c    ;

    initial
    begin
        $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    ;
    end

endmodule

4 $monitor用于持续监测变量

`timescale 1ns/1ns

module tb_test();

    reg [3:0]    a    ;
    reg [3:0]    b    ;
    reg [3:0]    c    ;

    initial
    begin
        a = 4'd5    ;
        #100    ;
        b = 4'd6    ;
        #100    ;
        c = a + b    ;
    end

    initial
    begin
        $monitor("%b + %b = %d ",a,b,c)    ;
    end


endmodule

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

`timescale 1ns/1ns

module tb_test();

    initial
    begin
        $display("hello")                ;
        $display("Embedfire")            ;    
        #100                             ;
        #display("Stop Simulation")      ;
        $stop    ;
        $display("Continue Simulation")  ;
        #100    ;
        $display("Finish Simulation")    ;
        #finish    ;  
    end

endmodule

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

`timescale 1ns/1ns


module tb_test();

    reg [3:0]    a    ;
    
    always # 10 a = $random    ;
    
    initial
    begin
        $monitor("a = %d,time :%d",a,$time)    ;
    end

endmodule


http://www.kler.cn/a/500100.html

相关文章:

  • 回溯算法汇总
  • 分布式一致性CAP与BASE理论、分布式一致性协议和算法——2PC、3PC 和 Paxos算法
  • springBoot整合ELK Windowsb版本 (elasticsearch+logstash+kibana)
  • Android基于回调的事件处理
  • SpringCloud
  • 数学建模_基于支持回归向量机SVR的回归预测之预测新数据+Matlab代码包教会使用,直接替换数据即可
  • PHP与ThinkPHP连接数据库示例
  • 【漫话机器学习系列】043.提前停止训练(Early Stopping)
  • Java(五十)java-IO流-缓冲流(BufferedInputStream和BufferedOutputStream)
  • ubuntu NVIDIA 驱动程序安装指南
  • 手游业务该如何选择服务器?
  • 有心力场的两体问题
  • 第 32 章 - Elasticsearch 的应用场景与技术解决方案
  • 【MySQL】SQL菜鸟教程(一)
  • CES Asia 2025科技创新奖申报火热进行中,23家企业积极参与
  • 《拉依达的嵌入式\驱动面试宝典》—操作系统篇(四)
  • 【EI,Scopus检索 | 往届均已检索见刊】第四届智能系统、通信与计算机网络国际学术会议(ISCCN 2025)
  • 基于php的web系统漏洞攻击靶场设计与实践
  • 第十二章 标准库——7.net包
  • MySQL中的事务(如果想知道MYSQL中有关事务的知识,那么只看这一篇就足够了!)
  • python音乐播放器代码整理版
  • 大语言模型训练数据集格式
  • DeepSeek:性能强劲的开源模型
  • Redis集群模式下主从复制和哨兵模式
  • 深入学习 Python 爬虫:从基础到实战