原创 FPGA序列检测

2014-7-4 09:03 1243 11 11 分类: FPGA/CPLD 文集: FPGA

一、用verilog实现11011的序列检测模块

a为输入端,b为输出端,如果a连续输入为11011则b输出为1,否则为0。 例如

a: 000110110110111101110

b: 000000010010010000100

思路:采用类似于流水线的方法,每一级有个使能,如下

module top(clk,rst_n,datain,dataout);
input clk;
input rst_n;
input datain;
output dataout;

reg en1;
always@(posedge clk or negedge rst_n)
if(!rst_n)
 en1<=1'b0;
else if(datain)   //  1
 en1<=1'b1;
else en1<=1'b0;

reg en2;
always@(posedge clk or negedge rst_n)
if(!rst_n)
 en2<=1'b0;
else if(en1&&datain)  // 1
 en2<=1'b1;
else en2<=1'b0;

reg en3;
always@(posedge clk or negedge rst_n)
if(!rst_n)
 en3<=1'b0;
else if(en2&&(~datain))  // 0
 en3<=1'b1;
else en3<=1'b0;

reg en4;
always@(posedge clk or negedge rst_n)
if(!rst_n)
 en4<=1'b0;
else if(en3&&datain)  // 1
 en4<=1'b1;
else en4<=1'b0;

reg en5;
always@(posedge clk or negedge rst_n)
if(!rst_n)
 en5<=1'b0;
else if(en4&&datain)  // 1
 en5<=1'b1;
else en5<=1'b0;

assign dataout=en5;

endmodule

20140704090012611.jpg


二、怎么用verilog实现一些超越代数函数,比如指数,对数等等

思路:1、直接用现成的 IP核 搭建;

      2、泰勒级数;

      3、cordic

      4、输入变量比较少时,可以采用查找表的方法。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条