初学FPGA,怎么从硬件上理解? 先理解组合逻辑和时序逻辑,后面就好说了,这里先讲讲狭义的组合逻辑和时序逻辑,时序逻辑一般指的是D触发器,组合逻辑指的是:与门或门非门,比较器,选择器,编码器,译码器,加法器,当然还有两类比较特殊的就是三态门和RAM,时序逻辑D触发器需要时钟来驱动的,也就是必须要有时钟才会动作,而组合逻辑不需要时钟驱动,在时序图上的表现就是时序逻辑的输出比输入晚一个时钟周期,而组合逻辑输入和输出都是在同一个时钟周期,所有的数字电路都是由组合逻辑和时序逻辑构成,大到CPU,小到电子表芯片,然后我们看看上面的组合逻辑和时序逻辑怎么来用硬件描述语言来描述。 1:与门 assignc=a&b; always@(*) c=a&b 2:或门 assignc=a|b; always@(*) c=a|b 3:非门 assignc=~a; always@(*) c=~a 4:比较器 assignc=(a》=b)?1‘b1:1’b0; always@(*) if(a》=b) c=1‘b1; else c=1’b0; 5:选择器 assignc=(a》=b)?d:e; always@(*) if(a》=b) c=d; else c=e; 6:译码器 always@(*) case(a) 2‘b0;c=4’b0001; 2‘b1;c=4’b0010; 2‘b2;c=4’b0010; 2‘b3;c=4’b1000; endcase 7:编码器 always@(*) case(a) 4‘b0001:c=2‘d0; 4’b0010:c=2’d1; 4‘b0010:c=2’d2; 4‘b1000;c=2’d3; endcase 8:加法器 assignc=a+b; 时序逻辑D触发器 alway@(posedgeclkornegedgerst_n) begin if(rst_n==1‘b0) q《=1’b0; else q《=d; end 描述完成上面的这些,我基本上可以用上面这些标准的电路和语言描述出90%的数字电路了,先从最简单的计数器开始吧,计数器在常见不过,我们先写一个模10的计数器,省去模块端口定义和信号定位,以下就是核心代码了,为了让LZ可以看清楚具体的电路,可能刚刚看着代码LZ可能会有些难懂,不过没有关系,要学会硬件的思维这个是必经之路我们可以看到一个简单的模10计数器实际上是由4部分组成,一个比较器,一个加法器,一个选择器,和4个D触发器,所以一个计数器实际上是由上面最初介绍的那几个基本单元组成,我打开了FPGA神器quartus,综合一些,改正了若干的语法错误,然后最终的综合的RTL电路如下电路和代码配合的实在是太好了代码描述了4部分的电路,而电路也表现出来了4部分的电路,我们可以看到ADDER加法器,LESS_THAN比较器,MUX21选择器最后一个D触发器,这就是硬件思维,硬件思维就是认为所有的数字电路都是由基本的组合逻辑和时序逻辑的组件组合而成,写出来的代码都有对应的最小的电路组件来对应,既然代码都写出来代码,那我们就来看看时序图,来验证一下时序逻辑的输入和输出总是延迟一个时钟周期,组合逻辑的输入和输出在同一个时钟周期,开始搭建testbench,此处省略一万字,熟悉的波形终于出来了可能上面那个也周期内的图不一定看的清,就看第二幅图吧,我们可以
初学FPGA, 怎么从硬件上理解? 来自淘豆网m.daumloan.com转载请标明出处.