首页 > 其他分享 >verilog学习

verilog学习

时间:2022-09-25 21:56:13浏览次数:33  
标签:wire clk always sum 学习 verilog input 赋值

可综合/不可综合

可综合:语法结构能与实际硬件电路对应起来

不可综合:语法结构不能与实际硬件电路对应起来

可综合语句:input、output、parameter、reg、wire、always、assign、begin..end、case、posedge、negedge、or、and、default、if、function、generate、integer、`define,while、repeat 、for (while、repeat循环可综合时,要具有明确的循环表达式和循环条件,for可综合时也要有具体的循环范围)

不可综合语句:initial、fork.. join、wait、time、real、display、 forever 、延时控制 #xxx

基本原则:

  • 不能使用initial,initial一般使用在测试程序,做初始化;
  • 不建议使用延时,#1,这种只是模拟数字电路中因为布线产生的信号延时,不可综合,但也不会报错;
  • 不能使用循环次数不确定的函数,但forever在综合设计中禁止使用,只能使用在仿真测试程序中;
  • 尽量使用同步电路设计方式(同步电路:电路中所有受时钟控制的单元,全部由一个统一的全局时钟控制);
  • 除非关键电路设计,一般不建议调用门级元件进行设计,一般使用行为级进行设计;
  • 当使用always进行组合逻辑设计时,敏感列表里面的要列出所有输入信号。
  • 在进行时序电路进行编写时,采用非阻塞赋值。组合逻辑设计时,采用阻塞赋值。在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。
  • (?)为避免产生锁存器,if、case要进行完整的语句赋值,且case语句中避免使用X值、Z值。
  • 避免混合使用上升沿和下降沿触发的触发器

整数表示方法

a=8'b1011_1001   //8bit的数值,采用2进制,下划线是为了增强代码的可读性,无实际意义
a=100;//一般会根据编译器自动分频位宽,常见的为32bit

阻塞赋值和非阻塞赋值

阻塞赋值顺序执行,顺序会影响我们想要设置的功能

非阻塞赋值同时执行,但是在块语句结束后完成赋值

assign/wire

assign a=b+c; //a一定为wire类型,b,c可以是wire类型或者reg类型

assign相当于电路连线,属于组合逻辑

parameter

parameters Max=10; //和 const int/define 类似 

always

always @ (a or b) begin  //括号内为敏感列表,敏感列表中的任何值发生变化,都会执行always中的指令
	[statements]
end
always @(posedge clk) begin //在clk上升沿执行always中的指令
	[statements]
end

在描述组合逻辑的always 块中用阻塞赋值

module combo (	input 	a,
      			input	b,
              	input	c,
              	input	d,
  	            output reg o);

  always @ (a or b or c or d) begin
    o = ~((a & b) | (c^d));
  end

endmodule

上面实现了一个简单的组合逻辑

在描述时序逻辑的always 块中用非阻塞赋值

module tff (input  		d,
						clk,
						rstn,
			output reg 	q);

	always @ (posedge clk or negedge rstn) begin
		if (!rstn)
			q <= 0;
		else begin
			if (d)
				q <= ~q;
			else
				q <= q;
		 end
	end
endmodule

上面实现了一个简单的时序逻辑

module

module定义

module add16(input	[15:0]  a  , 
             input	[15:0]  b  , 
             input		    cin, 
             output	[15:0]  sum, 
             output         cout);
//Module body
endmodule

input/output 可以是 wire/reg,默认是wire

module调用

module top_module(
    input  [31:0] a,
    input  [31:0] b,
    output [31:0] sum
);
wire [15:0] sum_low;
wire [15:0] sum_up ;
wire 		cout1  ;
wire 		cout2  ;
add16 instance1(.a		(a[15:0]), 
                .b		(b[15:0]), 
                .cin	(1'b0)	 , 
                .sum	(sum_low), 
                .cout	(cout1));
add16 instance2(.a		(a[31:16]),
                .b		(b[31:16]), 
                .cin	(cout1)   , 
                .sum	(sum_up)  ,
                .cout	(cout2));
assign sum = {sum_up, sum_low};
endmodule

instance1,instance2为调用add16模块的两个实例

时延 #xxx

always #10 clk = ~clk;//每10个时间单位单位执行一次翻转
always clk = ~clk;//没有时延,会出问题

标签:wire,clk,always,sum,学习,verilog,input,赋值
From: https://www.cnblogs.com/zhongzero/p/16729091.html

相关文章

  • 《Unix/Linux系统编程》学习笔记4
    第七章文件操作一.知识点归纳(一)文件操作级别文件操作分为五个级别,按照从低到高的顺序排列如下:1.硬件级别:硬件级别的文件操作包括:fdisk:将硬盘、U盘或SDC盘分区。mk......
  • 2022-2023-1 20221409 《计算机基础与程序设计》第四周学习总结
    2022-2023-120221409《计算机基础与程序设计》第四周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在......
  • 第七、八章学习笔记
    第七章文件I/O操作(1)用户模式下的程序执行操作FILEEp=fopen("file","r");可以打开一个读/写文件流。(2)fopen()在用户(heap)空间中创建一个FILE结构体,包含一个......
  • 20201322陈俊池 学习笔记4
    一、知识点归纳第七章文件操作7.1文件操作级别文件操作分为五个级别:(1)硬件级别:fdisk:将硬件、U盘或SDC盘分区。mkfs:格式化磁盘分区,为系统做好准备。fsck:检查......
  • 《Unix&Linux系统编程》第七章学习笔记
    第7章文件操作7.1文件操作级别1.硬件级别fdisk:将硬盘、U盘或SDC盘分区mkfs:格式化磁盘分区,为系统做好准备fsck:检查和维修系统碎片整理:压缩文件系统中的文件2.操......
  • Day2 :CMD学习笔记
    CMD学习笔记常见dos命令#盘符切换(X:)#查看当前目录下的全部文件夹(dir)#返回上一级(cd..)#跨盘符切换文件夹(cd/d文件夹位置)#清理屏幕(cls)#推出exit#查询......
  • 《Unix/Linux系统编程》第七、八章学习笔记
    第七章文件操作7.1文件操作级别文件操作分为五个级别,按照从高到低的顺序排列如下:(1)硬件级别fdisk:将硬盘、U盘或SDC盘分区。mkfs:格式化磁盘分区,为系统做好准备。f......
  • 2022-2023-1 20221408《计算机基础与程序设计》第四周学习总结
    |这个作业属于哪个课程|<班级的链接>https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP|这个作业要求在哪里|<作业要求的链接>https://www.cnblogs.com/rocedu/p/95......
  • 学习笔记4
    第七、八章学习笔记第七章文件操作1.文件操作级别(1)硬件级别:fdisk:将硬件、U盘或SDC盘分区。mkfs:格式化磁盘分区,为系统做好准备。fsck:检查和维修系统。碎片整理:压......
  • 2022-2023-1 20221424 《计算机基础与程序设计》第4周学习总结
    2022-2023-120221424《计算机基础与程序设计》第4周学习总结作业信息这个作业属于的课程(2022-2023-1-计算机基础与程序设计)这个作业要求在哪里(2022-2023-1......