我需要使用Verilog对我的数据进行上采样(2x)。我认为使用三个端口进行输入,一个端口用于输出。输入端口是filterin,reset和clock。输出端口是filterout。我还需要动态输入大小。我怎么能用Verilog来实现这一点。
EDIT1: 我的输入和输出数据是16位长。我只需要一个Verilog代码来执行此操作:
如果输入:1 2 3, 然后输出:1 0 2 0 3 0。
如果输入:1 2 3 4 5, 然后输出:1 0 2 0 3 0 4 0 5 0。
EDIT2: 我创建了一个verilog文件来解决这个问题,但它没有解决我的问题。
`timescale 1ns / 1ps
module US1 (filterin,clk,filterinus);
input [15:0] filterin;
input clk;
output reg [15:0] filterinus;
integer i=0;
always @ (posedge clk) begin
if (i==0) begin
filterinus <= filterin;
end
else begin
filterinus <= 0;
end
i=~i;
end
endmodule
我使用以下测试平台测试了此代码:
`timescale 1ps/1ps
module Test;
reg [15:0] filterin;
reg clk;
wire [15:0] filterinus;
US1 uut (
.filterin(filterin),
.clk(clk),
.filterinus(filterinus)
);
initial begin
clk = 1;
filterin = 1;
#2 filterin = 2;
#2 filterin = 3;
#2 filterin = 4;
#2 filterin = 5;
#30 $finish;
end
always #1 clk = ~clk;
endmodule
如所见,我的输入是:1 2 3 4 5。 我的输出是:1 0 3 0 5 0 5 0 5 0 ... 我需要看:1 0 2 0 3 0 4 0 5 0 0 0 0 0 ...
答案 0 :(得分:1)
对您的代码进行一些评论,假设这是用于综合的。
根据您的描述,我不确定您在此尝试实施的操作。你说上采样,但这不是一种典型的方法,如线性或三次插值方法。
答案 1 :(得分:1)
问题解决了。我从我的测试平台改变了输入期间的过滤器,如下所示:
filterin = 1;
#4 filterin = 2;
#4 filterin = 3;
#4 filterin = 4;
#4 filterin = 5;
#4 filterin = 0;
我得到了我的输出:1 0 2 0 3 0 4 0 5 0 0 0 ...