【Verilog】--初学语法

initial

initial 块通常用于设置初始条件、赋初值、生成测试激励等。它在硬件设计中不会被综合成实际的硬件电路,只在仿真中使用。

initial begin
  // 初始化语句
end

可以在 initial 块中使用延迟(如 #)来控制信号的时序。

always

always 块用于定义需要重复执行的行为或响应特定信号变化的逻辑。按照敏感信号(如时钟边沿、信号变化)重复执行

assign

assign 用于连续赋值语句,定义组合逻辑。常用于实现简单的逻辑运算和连线。持续计算右边表达式的值,并将其赋给左边的信号,适用于简单逻辑运算、信号连线和驱动信号。

总结:

initial:用于仿真开始时的初始化操作,只执行一次。

always:用于描述需要重复执行的行为或响应特定信号变化的逻辑,适用于时序逻辑。

assign:用于定义组合逻辑和信号连线,适用于简单逻辑运算。

顺序块与并行块 

顺序块由关键字begin-end声明,顺序块中的语句是一条接一条按顺序执行的,非阻塞赋值除外。延迟总是相对于前面那条语句执行完成的仿真时间的。

reg x,y;
reg [1:0] z,w;

initial begin
    x=1'b0;
    #5 y=1'b1;
    #10 z={x,y};
    #20 w={y,x};
end

//块语句完成时的仿真时刻为35

并行块由关键字fork-join声明,并行块中的语句是并行执行的,即便是阻塞形式的赋值。语句中的延迟是相对于块语句开始执行的时刻而言的。

reg x,y;
reg [1:0] z,w;

initial fork
    x=1'b0;
    #5 y=1'b1;
    #10 z={x,y};
    #20 w={y,x};
join

//块语句完成时的仿真时刻为20

integer是一种数据类型,用于声明整数变量。

integer i; // 声明一个整数变量 i

wait表示等待电平敏感的条件为真,后面的语句和语句块需要等待某个条件为真才能执行。

always
    wait(count_enable)         #20 count = count + 1;

仿真器连续监视count_enable的值,若其值为0,则不执行后面的语句,仿真会停顿下来;如果其值为1,则在20个时间单位之后执行这条语句。如果count_enable始终为1,那么count将每过20个时间单位加1。

{$random}%100 //生成一个0到99之间的随机数
integer rand_num;

// 生成一个范围在 10 到 99 之间的随机数
rand_num = 10 + ($random % 90);

异或:在 verilog 中以“ ^ ”表示异或,如 c= a^b ,当 a 和 b 相同时,输出为 0

RAM 的基本概念:RAM 是一种能够随机访问存储器,允许按照地址直接读取或写入数据。与只读存储器(ROM)不同,RAM 允许数据的读写操作,因此在计算机系统中广泛应用于临时数据存储和处理。

单口 RAM:只有一个数据输入/输出端口,即数据只能通过一个接口进行读取或写入。这意味着在同一时间内只能执行读取或写入操作,不能同时进行。

双口 RAM:具有两个独立的数据输入/输出端口,允许同时进行读取和写入操作。这种设计适用于需要高并发数据访问的应用场景,例如多任务处理或者异步数据通信。

在 Vivado 仿真中,默认情况下,数值是以十六进制显示的。这是因为十六进制表示法在查看二进制数时更加简洁和方便,特别是对于较大的数字。

localparam 是Verilog语言中用来定义局部参数(local parameter)的关键字,类似于parameter。

PWM(Pulse Width Modulation,脉冲宽度调制)是一种调制技术,通常用来通过调节脉冲信号的宽度来控制电子设备的输出功率。它广泛应用于电子电路中,特别是在控制电机速度、LED亮度调节、音频信号合成等方面。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值