原创 零基础学FPGA(三)Verilog语法基基础基础(上)

2014-2-25 21:28 7233 8 13 分类: FPGA/CPLD 文集: FPGA/CPLD

     开学了...刚开学...小伙伴们的心情十分沉重...都在说,这上课的心情啊,堪比上坟..课表一发,这学期的课还真不少,一天到晚全是课,表示这学期又是一个具有挑战性的学期啊,新赛季新气象,让我们开始今天的学习吧!哈哈~

     这几天复习了一下Verilog的语法知识,就借此写写我对这些东西的想法吧。感觉呢,是和C语言差不多,具有C语言基础的朋友学起来应该没什么问题,和C语言相同的地方就不说了吧,重点说一下不同点吧。

1、模块的结构

     模块呢,是Verilog的基本设计单元,它主要是由两部分组成,一个是接口,另一个是逻辑。下面举一个小例子说明一下:

module xiaomo (a,b,c,d);

   input a,b;

   output c,d;

   assign c=a|b;

   assign d=a&b;

endmodule

所谓接口就是第二,三行,说明了一个模块的信号流向,很明显,a,b是输入,c,d是输出;第四第五行是逻辑,即输入和输出之间的关系即c的值是a或b的结果。assign 是连续赋值语句,这个以后再说。

第一行是模块的端口声明,即说明一个模块具体有那几个接口,有多少接口写多少,直接套模板就可以module(接口1,接口2……);endmodule代表此模块结束;

2、模块的内容

模块的内容包括3个部分,I/O说明,内部信号说明和功能定义。

关于I/O说明有三种格式,即输入、输出、输入输出,第三种格式代表信号可以双向传送。在写I/O说明的时候要注明信号位宽,即由几位组成,例如 input [7:0] xiaomo;代表输入一个8位的信号“小墨”,注意这里要用中括号,第一位是位宽减1,接一个冒号,再接数字0,再接端口名;

关于内部信号说明要用到和端口有关的wire和reg类型变量的声明。模板和上面类似,关于reg和wire变量后面再说。

关于功能定义是模块中最重要的部分,有三种方法可在模块中产生逻辑

(1)用assign声明语句,assign 语句主要用于组合逻辑电路

(2)用实例元件,例如  and #2 u1(q,a,b);(这个我自己概念也有点模糊,不知道怎么解释)

(3)用always块,例如  always @(clk or clr)

                                       begin

                                                 ………

                                       end;

always语句既可以用于描述组合逻辑,也可以描述时序逻辑,但主要以描述时序逻辑电路为主。

  小结

    在verilog语法中,所有的过程块(包括initial块,always块),连续赋值语句,实例引用都是并行的,也就是说在一个模块中遇到这些语句就是同时执行的,而且没有先后次序。只有连续赋值语句assign和实例引用语句可以独立于过程块存在于模块的功能定义部分,即这两种语句可以不用在那两个过程块里执行,也可以在模块的功能定义部分执行,例如第一个例子。

  这些和C语言有点不同,对于初学者来说应该都要弄明白。

3、数据类型、变量、常量

      对于初学者来说,数据类型只要掌握好reg,wire,integer和parameter型就够了,其他类型可以暂时不用去理会。

   (1)常量就不说了,比较基础。

   (2)参数型(parameter型)

     parameter是用来定义一个常量的,个人理解和C语言里面的int,float 语句一样,不一样的是parameter既可以定义整型,也可以定义浮点型或者是表达式。例如

 

360桌面截图20140225201109.jpg
(3)变量
wire型数据常用来表示用以assign关键字指定的组合逻辑信号。Verilog程序模块中输入、输出信号类型默认时自动定义成wire型。例子
360桌面截图20140225202514.jpg
reg型数据是寄存器变量,常用来表示always块中的指定信号,常代表触发器。注意,在always块中被赋值 的每一个信号都必须定义为reg型
360桌面截图20140225202921.jpg
360桌面截图20140225203249.jpg
上面这句话表示不理解,求大神解释...先放这儿吧..
memory型
由于Verilog中没有多维数组的存在,memory数据就是通过扩展reg型数据的地址范围来生成的,他的格式为
          reg[n-1:0]  存储器名[m-1:0];
我举个例子,比如我定义   reg[7:0]  xiaomo[255:0];
这句话的意思是说,我定义了一个名叫“小墨”的存储器,这个存储器中有256个8位reg型寄存器,只要理解了这句话,就差不多了。注意,当没有中括号时代表的是一位,例如
reg xiaomo[m-1:0];代表一个名为“小墨”的存储器,里面有m个1位的reg型寄存器。
 
还有个地方我感觉不太明白,见下图,谁知道这句话上面意思...求大神解释...
360桌面截图20140225204415.jpg
下面这几句话需要注意
360桌面截图20140225204900.jpg
4、运算符及表达式
       这里和C语言几乎一样,就不做过多解释了吧。就说一下位拼接运算符和位减运算符,这里C语言里面没有。
直接看个例子就可以
360桌面截图20140225205538.jpg
360桌面截图20140225205844.jpg
5、赋值语句
 
赋值语句共有两种,即非阻塞赋值,和阻塞赋值。
(1)非阻塞赋值
   非阻塞赋值方式所赋值的变量不能立即就为下面语句所用,只有当块结束后才能得到上一次所附的值,这种赋值方式是编写可综合的时序逻辑时常用的赋值方式。例如
 
360桌面截图20140225211312.jpg
这个例子的意思是,当时钟上升沿到来时,a的值给b,b的值给c,但是只有当块结束时才完成赋值,这么说吧,假如原来a=1,b=2那么当时钟上升沿到来时a=1,b=2,c=2;当块结束时,a=b=c=1;
这么理解对吗?求大神指点...
 
 
360桌面截图20140225211856.jpg
 
(2)阻塞赋值
与非阻塞赋值不同,赋值语句执行完后块才结束,b 的值在赋值语句结束后立刻改变,但是在时序逻辑电路中可能会出问题。
 always @(clk or clr);
begin
    b=a;
    c=b;
end
假如开始a=1;当当时钟上升沿到来时,a=b=c=1;然后块结束
 
360桌面截图20140225212539.jpg
未完待续

 

 

 

文章评论5条评论)

登录后参与讨论

用户432542 2014-10-1 14:07

Good

用户1757811 2014-7-26 18:00

你介绍的阻塞与非阻塞理解的好像不对!

残弈悟恩 2014-3-5 22:17

恩,未完就慢慢来。

用户1736660 2014-3-1 13:35

看电路图可知应该是a=b=1,c=2吧?

用户377235 2014-3-1 10:15

不错啊

相关推荐阅读
小墨同学 2015-09-10 10:28
零基础学FPGA( 三十二) 写在京城,多级FIR半带滤波器的FPGA实现
        每次到京城来总不能忘了出去逛逛吧,偌大的北京城去哪呢?炙热的大太阳烤的哪都不想去了,幸好这次有亲戚来北京旅游,搭个顺风车便出去转了一下。这次的闲逛可没有上次那么感叹,上次主要是去的...
小墨同学 2015-08-29 15:19
零基础学FPGA(三十三)多相结构抽取滤波器笔记
        前两篇文章已经介绍过了,在多速率信号处理中,CIC滤波器和FIR半带滤波器应用的非常广泛,由于CIC滤波器的特殊结构,使得它非常适合采样速率远远大于信号速率的情况时的抽取跟内插滤波...
小墨同学 2015-08-29 15:18
零基础学FPGA(三十一)写在京城,Hogenauer CIC抽取滤波器的FPGA实现笔记
         实习完还没几天,突然接到北京至芯雷总的电话,让我赶往北京来做一些事情,就这样,我的又一趟北京之旅开始了。         上次来北京还是今年1月份,冬天嘛,京城光秃秃的一片,...
小墨同学 2015-08-05 20:50
【博客大赛】零基础学FPGA (二十六)必会! 从静态时序分析到SDRAM时序收敛(上篇)
    好像小墨有这么一个习惯啊,就是每篇文章的开头总喜欢叨叨几句啊~既然这样,那我们今天也聊几句好了,总感觉直接就开始学习专业知识有点让人看不进去~     今天我们就说说生活吧~时间很快啊,...
小墨同学 2015-07-26 21:57
[博客大赛]零基础学FPGA(三十) IIR数字滤波器的FPGA实现笔记
      然而暑假已经过了快一半,想想也是挺快的,前一段时间学校安排实习,在长沙待了一段时间,说是实习,感觉却是像是度假,住着酒店,100多号人,想想都觉的热闹。实习搞得是Java安卓,当然我也...
小墨同学 2015-06-17 09:50
[博客大赛] 零基础学FPGA (二十九)滤波器开篇,线性相位FIR滤波器的FPGA实现
        也是有一段时间不写博客了啊,主要是这学期的实验课太多,每天都是在写预习报告,实验报告中度过,也快到考试月了啊,感觉又要忙起来了,今天就抽点时间来开个头,开什么头呢?对!就如标题所示...
我要评论
5
8
关闭 站长推荐上一条 /2 下一条