2

Xilinx Vivado を使用して Virtex 7 の SystemVerilog に QAM モジュレータを実装しようとしていますが、ローカル オシレータの sin と cos の生成に行き詰まっています。

より具体的には、入力として I 信号と Q 信号 (それぞれ 3 ビット) があり、それぞれ余弦波と正弦波を乗算する必要があります。乗算は正常に機能しますが、特定の周波数でコサインとサインを生成するには IP が必要です。

そのために、次のリンクで提供されている DDS Compiler v6.0 のドキュメントをよく読みましたが、まだ行き詰っています 。 dds-compiler.pdf

誰かが私を助けるための提案やサンプルコードを持っていますか?

よろしくお願いします

編集:

以下のスクリーンショットとサンプルコードを見つけてください。私が理解していないのは、sin/cos がこれらの「奇妙な」値を取る理由です。dds_compiler を正しく使用しましたか?

スクリーンショットと Vivado プロジェクト (直接投稿する権限はまだありません): https://www.dropbox.com/s/xi5hralr2klk37s/dds_compiler.zip?dl=0

変調器.sv:

    `timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 31.03.2015 07:41:17
// Design Name: 
// Module Name: modulator
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module modulator(
    input  logic        clk,
    input  logic [2:0]  I,
    input  logic [2:0]  Q,
    output logic [18:0] p1,
    output logic [18:0] p2,
    output logic        tvalid
    );

    // internal signals
    logic [15:0] sin,cos;

    // carrier generation
    dds_compiler_0 dds_compiler_0_inst(
        .aclk(clk),
        .m_axis_data_tdata({sin,cos}),
        .m_axis_data_tvalid(tvalid)
    );

    // multiplier
    mult_gen_0 mult_gen_0_inst_1(
        .CLK(clk),
        .A(I),
        .B(cos),
        .P(p1)
    );
    mult_gen_0 mult_gen_0_inst_2(
            .CLK(clk),
            .A(Q),
            .B(sin),
            .P(p2)
        );

endmodule

変調器_テストベンチ.sv:

    `timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 31.03.2015 07:41:17
// Design Name: 
// Module Name: modulator_testbench
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module modulator_testbench();

    // test signals
    logic        clk;
    logic [2:0]  I, Q;
    logic [18:0] p1,p2;
    logic        tvalid;

    // generate clock
    always begin clk=1; #5; clk=0; #5; end

    // instantiate dut
    modulator dut(
        .clk(clk),
        .I(I),
        .Q(Q),
        .p1(p1),
        .p2(p2),
        .tvalid(tvalid)
    );

    // start simulation
    initial begin
        #65;
        I=3'd1;  Q=3'd1; #10;
        I=-3'd1; Q=3'd1; #10;
        I=3'd3;  Q=-3'd3; #10;
        I=-3'd3; Q=-3'd1; #10;
        I=3'd1;  Q=-3'd1; #10;
    end

endmodule

編集 II:

後世のために、完全なコードはここで入手できます。詳細と説明は論文に記載されています。

4

1 に答える 1