Êý×ÖÆµÂÊºÏ³ÉÆ÷ - ͼÎÄ ÏÂÔØ±¾ÎÄ

Î人¿Æ¼¼´óѧÖÐÄÏ·ÖУ2008½ì±ÏÒµÉè¼Æ(ÂÛÎÄ)

fp clk1clkinstͼ3.1 ·ÖƵÆ÷

Ä£¿é³ÌÐò£º

module fp(clk1,clk); input clk1; output clk; reg clk; reg [7:0] i;

always @(posedge clk1) begin i=i+1;

if(i==8'd122)

begin clk<=clk+1;i<=0; end

end endmodule

¡ì3.2ÏàλÀÛ¼ÓÆ÷

ËüÓÉÒ»¸ö¼Ó·¨Æ÷ºÍÒ»¸öλÏàλ¼Ä´æÆ÷×é³É£¬Ã¿À´Ò»¸öʱÖÓ£¬Ïàλ¼Ä´æÆ÷ÒÔ²½

fclkfclkf??K³¤Ôö¼Ó£¬Éè¼ÆÒªÇóƵÂʲ½½øÎª10Hz£¬¸ù¾Ý £¬µÃ£º=10£¬ÒòÒªÇóÊäoutNN22³öƵÂÊ·¶Î§Îª10Hz¡«10kHz£¬Ôò1?k?1000¡£ÓÉÓÚ»ù׼ƵÂÊ

f0?160KHz£¬ ÔòÓÐ

2N=fclk/10¡Ö20000£¬È¡N=11£¬µ±K=1000ʱ£¬ÔÚÕýÏÒ²¨Ò»¸öÖÜÆÚÄÚ»ù±¾ÉÏ¿ÉÒÔÈ¡16µã£¬¼´¿É´ïµ½ÎÞÊ§ÕæÒªÇó¡£ÏàλÀÛ¼ÓÆ÷ͼÈçͼ 3.2Ëùʾ£º

µÚ7Ò³ ¹²20Ò³

xx£º<Êý×ÖÆµÂÊºÏ³ÉÆ÷>

addclkk[9..0]db[11..0]ph[13..0]inst1 ͼ3.2 ÏàλÀÛ¼ÓÆ÷

ÊäÈë¶Ë·Ö±ðÊÇ160KHZµÄ»ù׼ƵÂÊºÍÆµÂÊ¿ØÖÆ×ÖK£¬Êä³ö¶ËÊÇ£º12λµÄµØÖ·ºÍ14λµÄÏàλ£¬Ö®ËùÒÔÑ¡Ôñ2¸öÊä³öÊÇÒòΪÔÚ²¨ÐÎROMÖÐÖ»´æ´¢ÁË1/4µÄ²¨ÐΣ¬ÎªÁËÄÜ×îºóµÄ²¨ÐκϳÉËùÒÔÐèÒªÊä³öÏàλ¡£ Ä£¿é³ÌÐò£º

module add(clk,db,ph,k); input clk; input [9:0] k; output [13:0] ph; output [11:0] db; reg [13:0] ph; reg [11:0] db;

always @(posedge clk) begin ph<=ph+k; db<=db+k; end endmodule

¡ì3.3²¨ÐÎת»»

ÏàλÀÛ¼ÓÆ÷Êä³öµÄµØÖ·ÊÇ0-T/4µÄÖ®¼äÑ­»·µÄ£¬Òò´Ë±ØÐë°ÑÏàλÀÛ¼ÓÆ÷Êä³öµØÖ·¸ù¾ÝÏà뽫Æäת»»³É0-1/2ÖÜÆÚµÄ²¨ÐΣ¬Ê¹Ö®ÕýÏÒ²¨µÄ°ë²¨¡£¾ßÌå²Ù×÷ÊÇ£º½«0-T/4ÄÚ²¨ÐιØÓÚT/4´¦¶Ô³Æ£¬Í¨¹ý±à³ÌʵÏÖºóÉú³ÉÔª¼þÈçͼ3.3Ëùʾ

µÚ8Ò³ ¹²20Ò³

Î人¿Æ¼¼´óѧÖÐÄÏ·ÖУ2008½ì±ÏÒµÉè¼Æ(ÂÛÎÄ)

zhph[13..0]db[11..0]clkq[11..0]inst2ͼ3.3 Ïàλ¿ØÖÆÄ£¿é

Ä£¿é³ÌÐò£º

module zh (ph,db,clk,q); input clk; input[13:0] ph; input[11:0] db; output[11:0] q; reg[11:0] q;

always@(posedge clk) begin

if(ph<4096) q<=db;

else if(ph>4095&&ph<8192) q<=4096-db; else if(ph>8191&&ph<12288) q<=db; else if(ph>12287) q=4096-db; end endmodule

¡ì3.4²¨ÐÎROM

²¨ÐÎROMµÄÄ£¿éͼÈçͼ3.4Ëùʾ¡£²¨Ðδ洢Æ÷ÖеÄÊýÖµÊǰ´ÕÕÒ»¶¨Ë³Ðò´æ´¢µÄ²¨ÐηùÖµ£¬ÎÒÃÇͨ¹ýÊäÈëµÄµØÖ·ÓÐ˳ÐòµÄ½«ÕâЩֵ¶Á³ö¾Í¿ÉÒԵõ½ÎÒÃÇËùÐèÒªµÄ²¨ÐεÄÀëÉ¢²¨ÐΡ££¬ÀíÂÛÉÏͨ¹ýÕâ¸ö¼¼Êõ¿ÉÒԵõ½ÎÒÃÇËùÐèÒªµÄÈκβ¨ÐΣ¬µ«Ôڸü¼ÊõÖÐÒ»¸ö¹Ø¼üµã¾ÍÊÇROMµÄ´óС£¬Éè¼ÆÈËÔ±Òª×öµÄ¾ÍÊÇÒªÔÚ»¹Ô­²¨ÐεÄǰÌáÏÂ×î´óµÄ½ÚÊ¡´æ´¢²¨ÐÎËùÕ¼ÓõÄROM¡£

µÚ9Ò³ ¹²20Ò³

xx£º<Êý×ÖÆµÂÊºÏ³ÉÆ÷>

ÔÚ±¾ÏµÍ³Öн«ÏàλÀÛ¼ÓÆ÷Êä³öµÄÊý¾Ý×÷Ϊ²¨Ðδ洢Æ÷µÄÈ¡ÑùµØÖ·£¬½øÐв¨ÐεÄÏàλ/·ù¶Èת»»£¬¼´¿ÉÔÚ¸ø¶¨Ê±¼äÉÏÈ·¶¨Êä³ö²¨ÐεijéÑù·ùÖµ¡£NλµÄѰַROMÏ൱ÓÚ°Ñ0¡ã¡«360¡ãµÄÕýÏÒÐźÅÀëÉ¢³É¾ßÓÐ2N¸öÑùÖµÐòÁС£±¾Éè¼Æ²¨ÐÎROMʹÓÃ

214¸ö´æ´¢µ¥Ôª´æ´¢1/4¸öÖÜÆÚµÄ²¨ÐÎÕâÑù½ÚÊ¡ÁË3/4µÄ´æ´¢¿Õ¼ä¡£ÆäÖÐ214¸öÑùÖµµÄ·ù¶ÈÒÔ8λ¶þ½øÖÆÊýÖµ´æÔÚROMÖУ¬ËùÈ¡µÄµØÖ·²»Í¬£¬Êä³ö¶ÔÓ¦ÕýÏÒÐźŵķù¶È¡£ÕâЩ8λµÄ·ùÖµÊý¾ÝµÄµÄ·¶Î§ÊÇ´Ó127µ½255µÄ£¬¼ÈÊÇÔÚ0µ½127µÄ·¶Î§ÉÏÕûÌåÌá¸ß127£¬Ô­ÒòÊÇD/Aת»¯Æ÷ÒªÇóÊä³öÊÇÕýÖµ£¬ËùÒÔ½«²¨ÐεÄÕûÌåÏòÉÏ̧¸ßÁËA/2£¨AΪÕýÏÒ²¨µÄ£©¡£

²¨Ðδ洢Æ÷£¨ROM£©Í¨¹ýµ÷ÓÃromÔª¼þʵÏÖ£¬ÆäromµÄÖµrom.mifÊÇÒ»¸ö´æ·Å²¨ÐηùÖµµÄÎļþ

romaddress[11..0]8 bits4096 wordsq[7..0]clockinst4Block type: AUTOͼ3.4 ²¨ÐÎROM

²¨ÐÎÊý¾ÝÎļþÊÇͨ¹ýMATLAB±à³ÌÉú³ÉMIFÎļþ£¬ÔÙ½«¸ÃÎļþµ¼Èëµ½Quartus

II 8.0Öм´¿ÉÉú³É´æ´¢ÁËËùÐèÒª²¨ÐεÄROM¡£MATLAB³ÌÐòÈçÏ£º

³ÌÐò£º

function data=makedata index = linspace(0,2*pi,2^12); sin_value = sin(index);

sin_value = sin_value * (2^11 -1 ); sin_value = fix(sin_value); sin_value =abs(sin_value); for i=1:1024

sin_value(i)=sin_value(i)+512;

µÚ10Ò³ ¹²20Ò³