我是靠谱客的博主 虚拟裙子,最近开发中收集的这篇文章主要介绍【LetMeFly】Verilog学习笔记 - 极简极入门级Verilog小总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Verilog小总结

01 语言风格、语法

Verilog语法和C语言较像,每句结尾同样需要分号。

assign a = b ? c : d;

注释方式和C语言一致,可以单行注释(在//之后),也可以多行注释(在/**/之间)

02

Verilog语言绝大多数内容需要包括在moduleendmodule之间

module Demo(a, b, c, d);
    assign a = b ? c : d;
endmodule

其中module后的参数列表写法比较灵活,可以只写参数名(如上),也可以加上参数类型;可以写到一行,也可以随意换行(或缩进);也可以写明那个参数是输入,那个参数是输出

module Demo(
    input reg a,
    output wire[0:3] b
);
endmodule

03 赋值

wire类型的数据需要用assign来赋值。因为线是连通的,所以假设assign a = b,那么当b变化时,a会随之发生变化

reg类型的数据需要在always语句块中进行赋值

always用法:

always @ (event) begin
	[multiple statements]
end

例如

// module ...

always @ (a) begin  // 此处空格非必须
    b = a;  // 不需要写assign,也不能写assign,因为b是reg类型的
end
// endmodule

上述代码的意思是,当a发生变化时,执行always语句块中的语句(b = a

其中event可以有*(代表所有事件)、变量名posedge(上升沿)、negedge(下降沿) (等)

04 testbench、延时

Verilog可以编写testbench来对信号进行赋值

一般方法为,再建立一个Verilog源代码文件,其中写一个module,在这个module中对编写好的待测module进行测试(赋值以便观察仿真结果等)

例如,写了一个加法module(可以另存为Test.v等)

module Test (
    input a,
    input b,
    output c
  );
  assign c = a + b;
endmodule

则可以编写测试文件(可以另存为Source.v等)

`timescale 1ns/1ps  // 时延单位1ns,时延精度1ps
module source;
 
  reg signal_a;
  reg signal_b;
  wire signal_c;
 
  add U0(
     .a(signal_a),
     .b(signal_b),
     .c(signal_c)
    );
  initial
    begin
      signal_a = 0;
      signal_b = 0;
      #10;  // 延时10毫秒
      signal_a = 0;
      signal_b = 1;
      #10;
      signal_a = 1;
      signal_b = 0;
      #10;
      signal_a = 1;
      signal_b = 1;
      #10;
      $stop;
    end
 
endmodule

赋值部分一般写到initial ... beginend之间。

其中延时为#加上要延时的时间

05 数字表示

Verilog中数字很多时候使用“位宽``````'``````进制``````数值”的方式表示,例如

4'b1001代表二进制下的四位数1001

End

The End, thanks!

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/128584160

最后

以上就是虚拟裙子为你收集整理的【LetMeFly】Verilog学习笔记 - 极简极入门级Verilog小总结的全部内容,希望文章能够帮你解决【LetMeFly】Verilog学习笔记 - 极简极入门级Verilog小总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部