您的位置 首页 报告

零根底学FPGA(四)Verilog语法基根底根底(中)

我们接着上篇文章继续学习,上次提到了两种赋值语句,让我们接着往下学。1、块语句块语句包括两种,一个是顺序块,一个是并行块。(1)顺序快顺序快就好比C语言里的大括号&

  咱们接着上篇文章持续学习,前次提到了两种赋值句子,让咱们接着往下学。

  1、块句子

  块句子包含两种,一个是次序块,一个是并行块。

  (1)次序快

  次序快就比如C言语里的大括号“{ }”,在Verilog语法中,用begin…end替代。这儿只需要知道,在begin…end中心的句子是次序履行的就行了。

  (2)并行块

  并行块能够算是一个新的知识点,与次序块最大的不同便是并行块中的句子是一起开端履行的,要想操控句子的先后次序,能够加延时句子操控。这种并行块是用fork…join句子描绘。

  2、条件句子

  条件句子这儿不说,和C言语相同。就说一点主见事项。

  在运用条件句子时,要注意句子的严整与封闭性。和C言语不同,举个比如

  always @(al or d)

  begin

  if(al==1) q=d;

  end

  这个比如是说,当al上升沿到来时,d的值赋给q,那么当al=0时又是什么状况呢,事实上,在always块中,假如没有给变量赋值,这个变量就会坚持原值,也便是生成了一个锁存器。为了防止这种状况的产生,咱们一般这样写

  always @(al or d)

  begin

  if(al==1) q=d;

  else q=0;

  end

  同样在case句子中也要加上default句子防止锁存器的生成,这样能够使规划者愈加清晰的规划方针,也提高了程序的可读性。

  3、case句子

  

360桌面截图20140226225540.jpg

 

  case句子要注意几点,只挑几点重要的,其他的不说了

  (1)case句子分项后的表达式的值有必要相同,不然就会出现问题,例如上面图片上的result。

  (2)与C言语不同,与某一项case句子匹配后,就会跳出case句子,这儿没有break句子。

  (3)case句子的一切表达式位宽有必要持平,例如上图都是16位整型,假如不加以阐明,体系会以默认值32位操控表达式位宽。

  下面是case,casez,case句子的真值表

  

360桌面截图20140226230246.jpg

 

  这个表其实仍是很好记的

  case句子,只需匹配才出“1”

  casez句子除了匹配出“1”之外,别的只需遇到“z”就出“1”

  case句子除了匹配出“1”之外,别的只需遇到“z”或“x”就出“1”

  

360桌面截图20140226231114.jpg

 

  上图就用到了casez句子来处理不必要考虑的值,这样就能够灵敏的设置对信号的默写位进行比较。

  下面写了一个小比如来操练一下

  运用case句子完成一个四选一多路选择器

  module xiaomo(a1,a2,a3,a4,out,s1,s2);

  input a1,a2,a3,a4;

  input s1,s2;

  reg out; //把输出变量声明为寄存器类型

  always @(s1 or s2 or a1 or a2 or a3 or a4 or out) //任何信号的改变都会引起输出变量的从头核算

  begin

  case ({s1,s2}) //位拼接运算

  2’b00: out=a1;

  2’b01: out=a2;

  2’b10: out=a3;

  2’b11: out=a4;

  default: out=1’bx; //坚持句子的严整性

  endcase

  end

  endmodule

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/117425.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部