ddd 发表于 2012-3-12 12:34:52

哪位做过基于FPGA函数信号发生器(频率和相位可调,VHDL语言编写的)的前辈

哪位做过基于FPGA函数信号发生器(频率和相位可调,VHDL语言编写的)的前辈。能不能借鉴下啊,我是刚学FPGA方面,不太懂

ChenDongKui 发表于 2012-4-2 21:06:02

这个使用DDS技术很容易做到。我用VERILOG写过这个东西,如有需要可与我联系,下面给你一个参考代码。

sine.v文件
module sine(
        inputclk,
        inputphase,
        inputnRst,
        output data
);

reg addr;
always@(posedge clk or negedge nRst)begin
if(!nRst)begin
        addr <= phase;
end
else begin
        addr <= addr +1'b1;
end
end

sineData GenerateSineDataByAddr(
        .clock(clk),
        .address(addr),
        .q(data)
);



//SineData.v文件
// megafunction wizard: %ROM: 1-PORT%
// GENERATION: STANDARD
// VERSION: WM1.0
// MODULE: altsyncram

// ============================================================
// File Name: sineData.v
// Megafunction Name(s):
//                         altsyncram
//
// Simulation Library Files(s):
//                         altera_mf
// ============================================================
// ************************************************************
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
//
// 9.0 Build 132 02/25/2009 SJ Full Version
// ************************************************************


//Copyright (C) 1991-2009 Altera Corporation
//Your use of Altera Corporation's design tools, logic functions
//and other software and tools, and its AMPP partner logic
//functions, and any output files from any of the foregoing
//(including device programming or simulation files), and any
//associated documentation or information are expressly subject
//to the terms and conditions of the Altera Program License
//Subscription Agreement, Altera MegaCore Function License
//Agreement, or other applicable license agreement, including,
//without limitation, that your use is for the sole purpose of
//programming logic devices manufactured by Altera and sold by
//Altera or its authorized distributors.Please refer to the
//applicable agreement for further details.


// synopsys translate_off
`timescale 1 ps / 1 ps
// synopsys translate_on
module sineData (
        address,
        clock,
        q);

        input        address;
        input          clock;
        output        q;

        wire sub_wire0;
        wire q = sub_wire0;

        altsyncram        altsyncram_component (
                                .clock0 (clock),
                                .address_a (address),
                                .q_a (sub_wire0),
                                .aclr0 (1'b0),
                                .aclr1 (1'b0),
                                .address_b (1'b1),
                                .addressstall_a (1'b0),
                                .addressstall_b (1'b0),
                                .byteena_a (1'b1),
                                .byteena_b (1'b1),
                                .clock1 (1'b1),
                                .clocken0 (1'b1),
                                .clocken1 (1'b1),
                                .clocken2 (1'b1),
                                .clocken3 (1'b1),
                                .data_a ({12{1'b1}}),
                                .data_b (1'b1),
                                .eccstatus (),
                                .q_b (),
                                .rden_a (1'b1),
                                .rden_b (1'b1),
                                .wren_a (1'b0),
                                .wren_b (1'b0));
        defparam
                altsyncram_component.address_aclr_a = "NONE",
                altsyncram_component.clock_enable_input_a = "BYPASS",
                altsyncram_component.clock_enable_output_a = "BYPASS",
                altsyncram_component.init_file = "sine.mif",
                altsyncram_component.intended_device_family = "Cyclone III",
                altsyncram_component.lpm_hint = "ENABLE_RUNTIME_MOD=NO",
                altsyncram_component.lpm_type = "altsyncram",
                altsyncram_component.numwords_a = 256,
                altsyncram_component.operation_mode = "ROM",
                altsyncram_component.outdata_aclr_a = "NONE",
                altsyncram_component.outdata_reg_a = "CLOCK0",
                altsyncram_component.widthad_a = 8,
                altsyncram_component.width_a = 12,
                altsyncram_component.width_byteena_a = 1;


endmodule

// ============================================================
// CNX file retrieval info
// ============================================================
// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
// Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
// Retrieval info: PRIVATE: AclrByte NUMERIC "0"
// Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
// Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
// Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
// Retrieval info: PRIVATE: Clken NUMERIC "0"
// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
// Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
// Retrieval info: PRIVATE: MIFfilename STRING "sine.mif"
// Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "256"
// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
// Retrieval info: PRIVATE: RegAddr NUMERIC "1"
// Retrieval info: PRIVATE: RegOutput NUMERIC "1"
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
// Retrieval info: PRIVATE: SingleClock NUMERIC "1"
// Retrieval info: PRIVATE: UseDQRAM NUMERIC "0"
// Retrieval info: PRIVATE: WidthAddr NUMERIC "8"
// Retrieval info: PRIVATE: WidthData NUMERIC "12"
// Retrieval info: PRIVATE: rden NUMERIC "0"
// Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE"
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
// Retrieval info: CONSTANT: INIT_FILE STRING "sine.mif"
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
// Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "256"
// Retrieval info: CONSTANT: OPERATION_MODE STRING "ROM"
// Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
// Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0"
// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "8"
// Retrieval info: CONSTANT: WIDTH_A NUMERIC "12"
// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
// Retrieval info: USED_PORT: address 0 0 8 0 INPUT NODEFVAL address
// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock
// Retrieval info: USED_PORT: q 0 0 12 0 OUTPUT NODEFVAL q
// Retrieval info: CONNECT: @address_a 0 0 8 0 address 0 0 8 0
// Retrieval info: CONNECT: q 0 0 12 0 @q_a 0 0 12 0
// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
// Retrieval info: GEN_FILE: TYPE_NORMAL sineData.v TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL sineData.inc FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL sineData.cmp FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL sineData.bsf TRUE FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL sineData_inst.v FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL sineData_bb.v TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL sineData_waveforms.html TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL sineData_wave*.jpg FALSE
// Retrieval info: LIB_FILE: altera_mf



//sine.mif文件
DEPTH = 256;
WIDTH = 12;
ADDRESS_RADIX = HEX;
DATA_RADIX = DEC;
CONTENT
        BEGIN
0000 :2048;
0001 :2098;
0002 :2148;
0003 :2198;
0004 :2248;
0005 :2298;
0006 :2348;
0007 :2398;
0008 :2447;
0009 :2496;
000A :2545;
000B :2594;
000C :2642;
000D :2690;
000E :2737;
000F :2784;
0010 :2831;
0011 :2877;
0012 :2923;
0013 :2968;
0014 :3013;
0015 :3057;
0016 :3100;
0017 :3143;
0018 :3185;
0019 :3226;
001A :3267;
001B :3307;
001C :3346;
001D :3385;
001E :3423;
001F :3459;
0020 :3495;
0021 :3530;
0022 :3565;
0023 :3598;
0024 :3630;
0025 :3662;
0026 :3692;
0027 :3722;
0028 :3750;
0029 :3777;
002A :3804;
002B :3829;
002C :3853;
002D :3876;
002E :3898;
002F :3919;
0030 :3939;
0031 :3958;
0032 :3975;
0033 :3992;
0034 :4007;
0035 :4021;
0036 :4034;
0037 :4045;
0038 :4056;
0039 :4065;
003A :4073;
003B :4080;
003C :4085;
003D :4089;
003E :4093;
003F :4094;
0040 :4095;
0041 :4094;
0042 :4093;
0043 :4089;
0044 :4085;
0045 :4080;
0046 :4073;
0047 :4065;
0048 :4056;
0049 :4045;
004A :4034;
004B :4021;
004C :4007;
004D :3992;
004E :3975;
004F :3958;
0050 :3939;
0051 :3919;
0052 :3898;
0053 :3876;
0054 :3853;
0055 :3829;
0056 :3804;
0057 :3777;
0058 :3750;
0059 :3722;
005A :3692;
005B :3662;
005C :3630;
005D :3598;
005E :3565;
005F :3530;
0060 :3495;
0061 :3459;
0062 :3423;
0063 :3385;
0064 :3346;
0065 :3307;
0066 :3267;
0067 :3226;
0068 :3185;
0069 :3143;
006A :3100;
006B :3057;
006C :3013;
006D :2968;
006E :2923;
006F :2877;
0070 :2831;
0071 :2784;
0072 :2737;
0073 :2690;
0074 :2642;
0075 :2594;
0076 :2545;
0077 :2496;
0078 :2447;
0079 :2398;
007A :2348;
007B :2298;
007C :2248;
007D :2198;
007E :2148;
007F :2098;
0080 :2047;
0081 :1997;
0082 :1947;
0083 :1897;
0084 :1847;
0085 :1797;
0086 :1747;
0087 :1697;
0088 :1648;
0089 :1599;
008A :1550;
008B :1501;
008C :1453;
008D :1405;
008E :1358;
008F :1311;
0090 :1264;
0091 :1218;
0092 :1172;
0093 :1127;
0094 :1082;
0095 :1038;
0096 :   995;
0097 :   952;
0098 :   910;
0099 :   869;
009A :   828;
009B :   788;
009C :   749;
009D :   710;
009E :   672;
009F :   636;
00A0 :   600;
00A1 :   565;
00A2 :   530;
00A3 :   497;
00A4 :   465;
00A5 :   433;
00A6 :   403;
00A7 :   373;
00A8 :   345;
00A9 :   318;
00AA :   291;
00AB :   266;
00AC :   242;
00AD :   219;
00AE :   197;
00AF :   176;
00B0 :   156;
00B1 :   137;
00B2 :   120;
00B3 :   103;
00B4 :    88;
00B5 :    74;
00B6 :    61;
00B7 :    50;
00B8 :    39;
00B9 :    30;
00BA :    22;
00BB :    15;
00BC :    10;
00BD :   6;
00BE :   2;
00BF :   1;
00C0 :   0;
00C1 :   1;
00C2 :   2;
00C3 :   6;
00C4 :    10;
00C5 :    15;
00C6 :    22;
00C7 :    30;
00C8 :    39;
00C9 :    50;
00CA :    61;
00CB :    74;
00CC :    88;
00CD :   103;
00CE :   120;
00CF :   137;
00D0 :   156;
00D1 :   176;
00D2 :   197;
00D3 :   219;
00D4 :   242;
00D5 :   266;
00D6 :   291;
00D7 :   318;
00D8 :   345;
00D9 :   373;
00DA :   403;
00DB :   433;
00DC :   465;
00DD :   497;
00DE :   530;
00DF :   565;
00E0 :   600;
00E1 :   636;
00E2 :   672;
00E3 :   710;
00E4 :   749;
00E5 :   788;
00E6 :   828;
00E7 :   869;
00E8 :   910;
00E9 :   952;
00EA :   995;
00EB :1038;
00EC :1082;
00ED :1127;
00EE :1172;
00EF :1218;
00F0 :1264;
00F1 :1311;
00F2 :1358;
00F3 :1405;
00F4 :1453;
00F5 :1501;
00F6 :1550;
00F7 :1599;
00F8 :1648;
00F9 :1697;
00FA :1747;
00FB :1797;
00FC :1847;
00FD :1897;
00FE :1947;
00FF :1997;
END ;

endmodule
页: [1]
查看完整版本: 哪位做过基于FPGA函数信号发生器(频率和相位可调,VHDL语言编写的)的前辈