verilog always语法_FPGA学习altera系列: 第五篇 Verilog HDL基础语法及三种建模方式

c5ae096a-721e-eb11-8da9-e4434bdf6706.gif大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来“FPGA学习系列 altera"系列,持续更新。此学习心得是本人之前所写,所用设计软件为Quartus II 13.1,现Quartus II 新版本已更新到19+,以下仅供初学者学习参考。后续会更新其他系列,敬请关注。话不多说,上货。

c6ae096a-721e-eb11-8da9-e4434bdf6706.gif 在Verilog HDL语言中,可综合的语句(可以被综合成电路)并不多,本篇中着重介绍可综合语句,不可综合语句后续再来介绍。 模块(module)是verilog HDL设计当中的基本组成单元,每个设计都是由一个或者多个模块构成,为了能更好地完成设计,我们先来学习模块的写法。 注意:在设计当中,应该在英文状态下输入,否则将会出现语法错误。Verilog HDL 是区分大小写的。 模块必须以关键字module开始,以关键字endmodule结束,例:
module (); ; ······ ······ endmodule
端口的方向:input(输入),output(输出),inout(双向端口)。 端口类型:wire(可以省略不写),reg。 端口的位宽:[X -1:0](定义一个位宽为X的总线)。
中间寄存器或中间连线,定义方法如下: wire [X-1:0] ; reg [X-1:0] ;
c6ae096a-721e-eb11-8da9-e4434bdf6706.gif 下面介绍verilog建模的方法: 1. 结构建模 在学习结构建模之前,我们首先先来学习一下,怎么样调用模块实例。 假设我们已经写好了一个二选一多路选择器的代码,如下:
module mux21 (dataa,datab, outdata, sel);      input [2:0] dataa;      input [2:0] datab;      inpur sel;      outdata [2:0] outdata;      ········      ········endmodule
那么我们应该怎么样去调用它呢?如下:
( .端口(连线), .端口(连线) );
下面是用结构建模的方式实现三选一:
module mux31 (dataa, datab, datac, sel1, sel2, outdata);  input[2:0] dataa;  input[2:0] datab;  input [2:0] datac;  input sel1;  input sel2;  output [2:0] outdata;  wire [2:0] data;  mux21  mux21_dut1(                    .dataa(dataa),                    .datab(datab),                    .outdata(data),                    .sel(sel1)                  );  mux21  mux21_dut2(                    .dataa(data),                    .datab(datac),                    .outdata(outdata),                    .sel(sel2)                  );         endmodule
上述建模是利用了两个二选一多路选择器来构成了一个三选一多路选择器。 c6ae096a-721e-eb11-8da9-e4434bdf6706.gif 2. 数据流建模 使用assign 语句进行赋值,例如: assign outdata = indata1 + indata2; 上述赋值执行的方式:当等号右端的数据发生变化时,右端的表达式就会被重新计算,然后赋给等号左侧的变量。 c6ae096a-721e-eb11-8da9-e4434bdf6706.gif 3. 行为建模 使用always 进行建模,例如:
always @ (posedge clk)  if(rst)    outdata <= 0;  else    outdata <= indata;
c6ae096a-721e-eb11-8da9-e4434bdf6706.gif 1) always 语句是重复执行的. 2) 括号里面的内容为敏感变量,当敏感变量有变化时,always语句执行一次。 3) 当敏感列表里面是posedge (上升沿)或者negedge(下降沿)时,用来描述时序逻辑,直接为某个电平时,用来表示组合逻辑。 4) 时序逻辑用<=(非阻塞)赋值,组合逻辑用=(阻塞)赋值。 5) 凡是在always模块当中被赋值了,都应该定义成reg的形式。 上述只是很简单的介绍了语法,如果还是不明白的小伙伴可以直接看笔者后续的内容,在应用中,慢慢去体会这些语法。END ‍制作人:郝旭帅(QQ:746833924)         QQ交流群:173560979(备注地区+名字) ‍大侠们,江湖偌大,继续闯荡,愿一切安好,有 缘 再见! cbae096a-721e-eb11-8da9-e4434bdf6706.png

cdae096a-721e-eb11-8da9-e4434bdf6706.jpeg

FPGA技术江湖广发江湖帖

无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,QQ微信双选,FPGA技术江湖打造最纯净最专业的技术交流学习平台。

FPGA技术江湖微信交流群

ceae096a-721e-eb11-8da9-e4434bdf6706.jpeg

加群主微信,备注职业+方向+名字进群

FPGA技术江湖QQ交流群

cfae096a-721e-eb11-8da9-e4434bdf6706.jpeg

备注地区+职业+方向+名字进群

d0ae096a-721e-eb11-8da9-e4434bdf6706.jpeg

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值