新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > 零基础学FPGA(四)Verilog语法基基础基础(中)

零基础学FPGA(四)Verilog语法基基础基础(中)

作者:时间:2014-12-31来源:网络收藏

  我们接着上篇文章继续学习,上次提到了两种赋值语句,让我们接着往下学。

本文引用地址:http://www.eepw.com.cn/article/267552.htm

  1、块语句

  块语句包括两种,一个是顺序块,一个是并行块。

  (1)顺序快

  顺序快就好比C语言里的大括号“{ }”,在语法中,用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

fpga相关文章:fpga是什么


c语言相关文章:c语言教程



上一页 1 2 3 下一页

关键词: FPGA Verilog

评论


相关推荐

技术专区

关闭