微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 新人自学FPGA

新人自学FPGA

时间:10-02 整理:3721RD 点击:
程序是一个四位二进制加法计数器:

moduleCNT4B(CLK,RST,ENA,CLK_1,RST_1,ENA_1,OUTY,COUT);//端口声明   


input CLK,RST,ENA;


output CLK_1,RST_1,ENA_1;


output[3:0] OUTY;


output COUT;


          reg[3:0] OUTY;


reg COUT;//寄存器变量OUTY,位宽为1


wire  CLK_1;


wire  RST_1;


wire  ENA_1;


assign CLK_1 = CLK;


assign RST_1 = RST;


assign ENA_1 = ENA;


      


always@(posedge CLKor negedge RST) /*当CLK上升沿或者RST上升沿时,触发always模块执行*/



begin


       if(!RST)


              begin


              OUTY<=4'b0000;


              COUT<=1'b0;/*当复位信号等于0时,计数OUTY、COUT置0*/


              end


       else


       if(ENA)/*当使能信号为1时,计数器计数工作*/


              begin


              OUTY<=OUTY+1;


              COUT<=OUTY[0] & OUTY[1] &OUTY[2] & OUTY[3];  /*计数显示*/


              end


end   


endmodule



红色部分是不明白的地方,<=是赋值的意思么?用等号可以么?还有COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3]这一句,用&号连接不是逻辑与么...

买了自学课本的,没在手边,新人小白求问,先谢谢各位!


新人求助!

帮你顶~

OUTY<=OUTY+1;是赋值的意思,将OUTY加1,就和C语言 OUTY=OUTY+1 是一样的
COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3] 这句话的意识是  当OUTY累加到 (二进制) 1111b 是,COUT的值就是1,其余COUT的值为0,四位二进制加法器,加满溢出,COUT就是溢出标志

OUTY加到1111b时, OUTY=1&1&1&1=1;只有这一种情况OUTY的值是1,&符号意思是逻辑与

我手头有FPGA开发板的学习资料可以分享给你

"<="是非阻塞赋值方式,“=”是阻塞赋值方式,“<=”赋值语句要等到整个块结束之后在进行赋值,“=”则是在该条语句执行完就赋值。

首先说<=的问题,是赋值符号,称之为非阻塞赋值,这种赋值是在alway 块内语句都执行完后才赋值,=是阻塞赋值,即执行该条语句就赋值,这里是时序逻辑,所以要用<=。第二个问题,四个值之间是与的关系,即都为1 cout为1,即outy一共计数了四个值,cout为进位

这个自学有难度。

1.<=是非阻塞赋值,在always块完成后才赋值;
=是阻塞赋值,赋值完成后才进入下一句;
一般时序逻辑用<=,组合逻辑用=
2.&按位与,在此处应该是检测OUTY是否溢出

因为是时序逻辑,所以用<=

区别


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top