FPGA-实例化的通俗理解(3-8译码器为例)

简介: FPGA-实例化的通俗理解(3-8译码器为例)

实例化


以下以3线8线译码器实现函数为例:

首先设计一个3线8线译码器

moduledecoder_3_8(
inputrst_n                           ,
input             [2 :0]      data_in                       ,
outputreg [7 :0]       data_out    );
always@(*) beginif(!rst_n)
data_out=8'b0;elsebegincase(data_in)
3'b000   : data_out=8'b1111_1110;
3'b001   : data_out=8'b1111_1101;
3'b010   : data_out=8'b1111_1011;
3'b011   : data_out=8'b1111_0111;
3'b100   : data_out=8'b1110_1111;
3'b101   : data_out=8'b1101_1111;
3'b110   : data_out=8'b1011_1111;
3'b111   : data_out=8'b0111_1111;
default : data_out=8'b0000_0000;endcaseendendendmodule

这是你们经常喜欢用的case写的。下面是RTL图

 

另一种写法。

moduledecoder_3_8(
input             [2 :0]      data_in                       ,
output           [7 :0]      data_out    );
assigndata_out[0]=data_in[0]|data_in[1]|data_in[2];
assigndata_out[1]=~data_in[0]|data_in[1]|data_in[2];
assigndata_out[2]=data_in[0]|~data_in[1]|data_in[2];
assigndata_out[3]=~data_in[0]|~data_in[1]|data_in[2];
assigndata_out[4]=data_in[0]|data_in[1]|~data_in[2];
assigndata_out[5]=~data_in[0]|data_in[1]|~data_in[2];
assigndata_out[6]=data_in[0]|~data_in[1]|~data_in[2];
assigndata_out[7]=~data_in[0]|~data_in[1]|~data_in[2];
Endmodule

所以我们采用下面的那种写法:

module 和endmodule是固定的形式。

decoder_3_8是你所设计的电路的名字。

module decoder_3_8;

endmodule

这两行代码类似于你在一张纸上画 了框架图形

然后继续画

(
input             [2 :0]      data_in                       ,
output           [7 :0]      data_out    );

这个就是定义你设计的电路模块的输入和输出端口,如下:

现在你的电路你的电路已经把外壳设计好了,所以需要设计内部的电路了。就是下面的代码。就是用语言描述出输出与输入的对应关系。

assigndata_out[0]=data_in[0]|data_in[1]|data_in[2];
assigndata_out[1]=~data_in[0]|data_in[1]|data_in[2];
assigndata_out[2]=data_in[0]|~data_in[1]|data_in[2];
assigndata_out[3]=~data_in[0]|~data_in[1]|data_in[2];
assigndata_out[4]=data_in[0]|data_in[1]|~data_in[2];
assigndata_out[5]=~data_in[0]|data_in[1]|~data_in[2];
assigndata_out[6]=data_in[0]|~data_in[1]|~data_in[2];
assigndata_out[7]=~data_in[0]|~data_in[1]|~data_in[2];

这样就得到了我们的译码器。

 

接下来就是用译码器来实现函数了,我们以f=m1+m2+m5+m7为例。

要使用译码器就需要对他的输入端口和输出端口进行一定的连接,我们的输入就接译码器的输入,译码管的输出如下表

image.png

可以看出当我们的data_out[1]、 data_out[2]、 data_out[5] 、data_out[7]其中一个为零时函数的输出要为一。

下面是我们的实现函数部分代码:

modulefunction_1(
input      [2:0]       data_in                ,
outputfunction_out    );                              
wire[7:0]       data_out                     ;           
decoder_3_8inst1(
.data_in        (data_in        ),
.data_out      (data_out     )     
    );   
assignfunction_out=~(data_out[1]&data_out[2]&data_out[5]&data_out[7]);             
endmodule

箭头指的那些可以全部理解成导线,就是把我们刚刚设计好的译码器的输入和输出端口用导线进行了一定的连接。


可以看到前面这个模块就是我们刚刚设计的译码器,后面的就是我们的赋值语句

assign    function_out=~(data_out[1]&data_out[2]&data_out[5]&data_out[7]);      

这样我们的电路就设计好了。

所谓实例化就是把我们之前设计好的电路,拿过来进行使用,对输入和输出进行一定的连接。

各个模块编写好以后,用顶层的.v文件进行连接。

说白了就是在PC端进行物理连线的过程。

目录
相关文章
|
7月前
|
算法 异构计算 Python
m基于FPGA的217卷积编码维特比译码verilog实现,包含testbench不使用IP核
该内容展示了使用Vivado 2019.2进行卷积编码和维特比译码的模拟。提供了编码、译码输出和RTL图的图片,以及Verilog实现的核心代码。卷积编码是一种前向纠错技术,基于生成多项式产生冗余数据;维特比译码利用动态规划恢复原始信息,最小化错误。Verilog程序包含了编码和译码模块,以及输入输出信号的时序操作。
113 0
|
算法 异构计算
通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
165 0
|
编解码 算法 异构计算
m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
257 0
|
异构计算
FPGA(6)--7段显示译码器的加法计数器
FPGA(6)--7段显示译码器的加法计数器
263 1
FPGA(6)--7段显示译码器的加法计数器
|
算法 异构计算
m基于FPGA的viterbi译码verilog实现,包含testbench和MATLAB配套验证仿真程序
m基于FPGA的viterbi译码verilog实现,包含testbench和MATLAB配套验证仿真程序
173 0
|
异构计算
FPGA 8-3译码器(二)
FPGA 8-3译码器(二)
357 0
FPGA 8-3译码器(二)
|
异构计算
FPGA 8-3译码器(一)
FPGA 8-3译码器(一)
104 0
FPGA 8-3译码器(一)
|
异构计算
FPGA(5)--VHDL--10十进制计数器及7段显示译码器
FPGA(5)--VHDL--10十进制计数器及7段显示译码器
784 0
FPGA(5)--VHDL--10十进制计数器及7段显示译码器
|
芯片 异构计算
FPGA设计8-3线优先编码器与3-8线译码器
本文主要介绍FPGA设计8-3线优先编码器与3-8线译码器
1532 0
FPGA设计8-3线优先编码器与3-8线译码器
|
14天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现了16QAM基带通信系统,包括调制、信道仿真、解调及误码率统计模块。通过Vivado2019.2仿真,设置不同SNR(如8dB、12dB),验证了软解调相较于传统16QAM系统的优越性,误码率显著降低。系统采用Verilog语言编写,详细介绍了16QAM软解调的原理及实现步骤,适用于高性能数据传输场景。
113 69