Shangkui的个人空间 https://blog.eetop.cn/yangs [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Verilog HDL语言基础

热度 1已有 2594 次阅读| 2020-3-19 16:57 |个人分类:芯片设计|系统分类:芯片设计| VHDL

二选一选择器
module muxtwo(out,a,b,s1);
      input a,b,s1;
      output out;
      reg out;
      always @ (s1, or a or b)
           if (!s1) out = a;
           else out = b;
endmodule
没有定义端口的位数,所有端口大小默认为1位;没有定义端口的数据类型,都默认为线网型数据类型。输出out定义为reg类型。
 
2.3数据类型和运算符
Verilog HDL语言的基本要素:标志符、数据类型、模块端口、值集合及表达式
标志符:字母、数字、下划线和$符号,第一个字符必须是字母或下划线
数据类型
Wire型wire[n-1:0]数据名1,数据名2,数据名3,…,数据名N定义了N条线,每条线位宽为n
Reg型
赋值可以改变寄存器存储的值,相当于改变触发器存储器的值。Reg型数据常用来表示always模块内的指定信号,代表触发器。Always块内被赋值的每一个信号都必须定义为reg型。Reg型保持最后一次的赋值,而wire型需要持续地驱动。
Memory型
Memory型通过扩展reg型数据的地址范围来达到二维数组的效果,定义格式如下:
Reg[n-1:0]存储器名[m-1:0]
Parameter型
Verilog中用parameter来定义常量,即用parameter来定义一个标志符表示常数
Parameter 参数名1 = 数据名1;
 
2.4 verilog HDL语言的描述语句
结构描述形式
一个全加器
module ADD(A,B,Cin,Sum,Cout);
   inputA,B,Cin;
   output Sum,Cout;
   wire S1,T1,T2,T3;
  
   xor X1(S1,A,B),
      X2(Sum,S1,Cin);
   And A1 (T3,A,B),
       A2 (T2,B,Cin),
       A3 (T1,A,Cin);
 
  Or O1 (Cout,T1,T2,T3);
Endmodule
 
数据流移位器
Module mlshift2(a,b);
   Input a;
   Input b;
 
   Assign b=a<<2;
Endmodule
只要a的值发生变化,b就会被重新赋值,所赋值为a左移两位后的值
 
行为描述
通常采用4中过程模块来实现
Initial模块  面向仿真,初始化、监视、波形生成等功能,只执行一次
Always模块
任务task模块
函数function模块
Mudule and3(f,a,b,c)
   input a,b,c;
   output f;
   reg f;
 
   Always @ (a or b or c ) begin
      F=a&b&c;
   End
endmodule

语句块
1)begin...end
用来组合需要顺序执行的语句,称为串行块,如:
parameter d-50;
reg[7:0] r;
begin
# d r='h35;
#d r='hE2
#d r='h00;
#d->end_wave;
end
2)fork...join
用来组合需要并行执行的语句,称为并行块。如:
parameter d=50
reg[7:0] r;
fork
# d r = 'h35;
#d r='hE2
#d r='h00;
#d->end_wave;
join


3.时序控制
延时控制,表示语句执行前的“等待延时”
# 延时数 表达式;
initial
begin
# 5 clk=~clk;
end

事件控制
上升沿用posedge描述,下降沿用negedge描述
reg[4:0] cnt;
always @(posedge clk) begin
if (reset)
cnt<=0;
else
cnt<=cnt+1;
end
只要clk信号有上升沿,那么cnt信号就会加1,完成计数的功能。

注释
//或/* */

模块调用
Verilog中有两种模块调用方法。
位置映射法,严格按照模块定义的端口顺序来链接。语法为
模块名 (连接端口1信号名,连接端口1信号名,连接端口1信号名,...)
信号映射法,即利用“.”符号,表明原模块定义时的端口名,语法为
模块名(.端口信号名(连接端口1信号名),
.端口信号名(连接端口2信号名),
.端口信号名(连接端口3信号名),...);
信号映射法同时将信号,名和被引用端口名列出来,不严格遵循端口顺序,不仅降低了代码易错性,还提高了可读性和可移植性,因此,良好的代码中,严禁使用位置调用法,全部采用信号映射法。

2。6常用verilog程序示例
触发器
1)同步RS触发器
RS触发器分为同步触发器和异步触发器
正触发型同步RS触发器的Verilog实现。
module sy_rs_ff (clk,r,s,q,qb);
input clk,r,s;
output q, qb;
reg q;

assign qb=~q;
always @ (posedge clk) begin
case ({r,s})
2'b00: q< =q;
2'b01: q< =1;
2'b10: q< =0;
2'b11: q< =1'bx;
endcase
end
endmodule

同步T触发器的Verilog实现
module sy_t_ff(clk,r,qb);
input clk,r;
output q, qb;
reg q;
assign qb=~q;
always @ (posedge clk) begin
if(r)
q<=0;
else
if(t)
q<=q;
else
q<=~q;
end
endmodule


1

点赞

刚表态过的朋友 (1 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 5

    粉丝
  • 1

    好友
  • 15

    获赞
  • 2

    评论
  • 675

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-10 05:23 , Processed in 0.023041 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部