栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

22/4/24始—— Vivado与Verilog学习有记[更新ing]

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

22/4/24始—— Vivado与Verilog学习有记[更新ing]

界面说明


 

选项作用
Schematic将所写代码构成电路图展现出来。
IP Catalog文件中所带的库函数
RTL ANALYSIS得出RTL图
SYNTHESIS对代码进行综合
IMPLEMENTATION对代码进行综合实现电路图
Verilog 代码说明
  • 0:逻辑0—“假”
  • 1:逻辑1—“真”
  • x 或X: 未知
  • z或Z:高阻

说明:x意味着信号数值的不确定;z意味着信号处于高阻状态,常见于( input ,reg )没有驱动时的逻辑结果。

现阶段常用的数据类型

线网 wire 由其连接的器件输出连续驱动,如果没有驱动元件连接到wire型变量,缺省值一般为 “Z”

寄存器 reg 表示存储单元,保持原有值直到被改写。可在任意时刻通过赋值操作进行改写。

向量 位宽大于1时,wire或reg可声明为向量的形式。有点像C语言中的数组。

定义向量时在中括号中给出了位数,定义位数时先写MSB的序号再写LSB的序号。当用向量表示数字时,术语MSB和LSB的意义是很直观的,在其余情况中,位选信号只是用来区分向量中不同位的.

示例:

reg [3:0]      counter ;    //声明4bit位宽的寄存器counter
wire [32-1:0]  gpio_data;   //声明32bit位宽的线型变量gpio_data
wire [8:2]     addr ;       //声明7bit位宽的线型变量addr,位宽范围为8:2
reg [0:31]     data ;       //声明32bit位宽的寄存器变量data, 最高有效位为0
关键词

assign 对输出信号进行连续赋值

采用连续赋值描述电路:


 

module example3(x1,x2,s,f);
	input x1,x2,s;
	output f;

	assign f=(~s&x1)|(s&x2);
endmodule

always@() 包含着过程语句

  • ‘@’ 后面括号中的内容称为敏感事件列表,当用Verilog进行电路综合时,敏感事件列表直观告诉Verilog编译器哪些信号会直接影响 always 块产生的输出(可以用 * 代替所有信号 )
  • 一个 always 块可以只包含一条语句,也可以包含多条语句。一个典型的Verilog模块中可以包含多个 always 块。

示例:

 

//Behavioral specification
module example(x1,x2,s,f);
	input x1,x2,s;
	output f;
	reg f;
	always @(x1 or x2 or s)
		if(s==0)
			f=x1;
		else
			f=x2;
endmodule

begin -and 相当于C语言里的大括号

Verilog 中的语句

其实 Verilog 中的大部分语句和C语言中的语法差不多,但其中有些细节不一样:

    if … else

示例:

module mux2to1(w0,w1,w2,S,f);//2悬疑
	input w0,w1,w2;
	input [1:0]S;
	output reg f;
	always @*
		if(S==0)
			f=w0;
		else
			f=w1;
endmodule

    case

将控制表达式的值和每个选择语句的值按位进行比较,当有一个或多个选择匹配时,只执行第一个匹配的语句。当指定的选择不能包含控制表达式的所有可能值时,就必须包含default语句,否则Verilog编译器会综合存储器单元以处理未定义情况。

  • casex:
    casex 语句将所有z和x值作为无关项。

  • casez:
    casez 语句将所有z作为无关项对待。

简单的示例:

module dec2to4(W,En,Y); //二进制2-4译码器
	input [1:0]W;
	input En;
	output reg [0:3]Y;
always @(W,En)
	case({En,W}) // { , } 拼接向量
		3'b100:Y=4'b1000;//四位二进制数字
		3'b101:Y=4'b0100;
		3'b110:Y=4'b0010;
		3'b111:Y=4'b0001;
		default:Y=4'b000;
	endcase
endmodule

    for
注意:写到条件的时候,不存在 ++ 运算符,只能写作x=x+1。

示例:

module priority(W,Y,z);
   input [3:0]W;
   output reg[1:0]Y;
   output reg z;
   integer k;//整数
   always@(W)
   begin
   	Y=2'bx;
   	z=0;
   	for(k=0;k<4;k=k+1)
   		if(W[k])
   		begin
   			Y=k;
   			z=1;
   		end
   	end
   endmodule
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号