一、用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
二、怎么用verilog实现一些超越代数函数,比如指数,对数等等
思路:1、直接用现成的 IP核 搭建;
2、泰勒级数;
3、cordic
4、输入变量比较少时,可以采用查找表的方法。
文章评论(0条评论)
登录后参与讨论