Upsample с Verilog - PullRequest
       8

Upsample с Verilog

0 голосов
/ 14 мая 2011

Мне нужно повысить (2x) мои данные, используя Verilog.Я думаю использовать три порта для ввода и один порт для вывода.Входные порты являются фильтрами, сбросом и синхронизацией.Выходной порт отфильтрован.Также мне нужен динамический размер ввода.Как я могу реализовать это с 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 для решения этой проблемы, но он не решил мою проблему.

US1.v file

`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

Я тестировал этот код на следующем испытательном стенде:

Файл Test.v

`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 ...

Ответы [ 2 ]

1 голос
/ 15 мая 2011

Проблема решена. Я изменил период ввода фильтра из своего тестового стенда следующим образом:

    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 ...

1 голос
/ 15 мая 2011

Несколько комментариев к вашему коду, предполагая, что это для синтеза.

  • Не инициализируйте переменную 'i' в объявлении.Это не всегда можно синтезировать.
  • Не используйте целочисленный тип для одного бита переключения.Это делает ваш код менее понятным и усложняет работу инструментов.
  • Никогда не смешивайте блокирующие и неблокирующие назначения в одном и том же всегда блоке.

Учитывая ваше описание, я неуверен, какую операцию вы пытаетесь осуществить здесь.Вы сказали, что передискретизация, но это не типичный подход, такой как линейные или кубические методы интерполяции.

...