Driving MCP4922_DAC By Verilog
موضوع
راه اندازی مبدل دیجیتال به آنالوگ توسط سخت افزار به زبان وریلاگ
بررسی دیتا شیت مبدل دیجیتال به آنالوگ
کد راه انداز مبدل دیجیتال به آنالوگ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
/* www.octacore.ir */ /* ایجاد ماژول و تعیین پورت ها */ module DAC_mcp4922 (mosi,sck,shdn,ldac,cs,clk_20M,enable,clk_40M,data,LOCKED); /* تعیین پورت های خروجی */ output reg cs=1'b1,sck=1'b0,mosi=1'b0,ldac=1'b1; output wire shdn; /* تعیین پورت های ورودی */ input wire clk_20M,clk_40M,enable,LOCKED; input wire [ 11 : 0 ] data; /* تعیین متغیر های داخلی */ reg [ 4 : 0 ] counter=5'b0; reg flag=1'b1; /* تولید کلاک مورد نیاز */ always @ (clk_20M or enable or cs or LOCKED) begin if(enable==1'b1 && LOCKED==1'b1) begin if(cs==1'b0) begin sck=clk_20M; end else sck=1'b0; end else sck=1'b0; end /* ارسال دیتا به مبدل */ always @ (negedge clk_40M) begin if (enable==1'b1 && LOCKED==1'b1) begin if (cs==1'b1&&flag==1'b1) begin if(clk_20M==1'b0) cs<=1'b0; else cs<=1'b1; end else begin if (clk_20M==1'b1) begin if(counter<5'd20) counter<=counter+4'b1; else counter<=5'b1; end else begin case(counter) 5'd1: begin mosi<=1'b1; cs<=1'b0; ldac<=1'b1; flag<=1'b1; end 5'd2: begin mosi<=1'b1; cs<=1'b0; ldac<=1'b1; flag<=1'b1; end 5'd3: begin mosi<=1'b1; cs<=1'b0; ldac<=1'b1; flag<=1'b1; end 5'd4,5'd5,5'd6,5'd7,5'd8,5'd9,5'd10,5'd11,5'd12,5'd13,5'd14,5'd15: begin mosi<=data[4'hf-counter]; cs<=1'b0; ldac<=1'b1; flag<=1'b1; end 5'd16: begin mosi<=1'b0; cs<=1'b1; ldac<=1'b1; flag<=1'b0; end 5'd17,5'd18,5'd19: begin mosi<=1'b0; cs<=1'b1; ldac<=1'b0; flag<=1'b0; end 5'd20: begin mosi<=1'b0; cs<=1'b0; ldac<=1'b1; flag<=1'b1; end default: begin mosi<=1'b0; cs<=1'b1; ldac<=1'b1; flag<=1'b1; end endcase end end end else begin counter<=4'b0; cs<=1'b1; mosi<=1'b0; ldac<=1'b1; flag<=1'b1; end end /* تعیین پورت خاموشی سخت افزارس */ assign shdn=1'b1; /* پایان ماژول */ endmodule |
کد TOP ماژول
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* www.octacore.ir */ /* ایجاد ماژول تاپ و تعیین پورت ها */ module TOP(CLK_24M,cs,ldac,sck,mosi,shdn); /* مشخص کردن پورت های خروجی */ output wire cs,ldac,sck,mosi,shdn; /* مشخص کردن پورت های ورودی */ input wire CLK_24M; /* اتصالات میانی */ wire CLK_20M,CLK_40M,LOCKED,enable; wire [35:0] CONTROL0; wire [11:0] data; /* فراخوانی ماژول و هسته ها */ DAC_mcp4922 U1 (mosi,sck,shdn,ldac,cs,CLK_20M,enable,CLK_40M,data,LOCKED); CLK U2 (CLK_24M,NO_USE,CLK_20M,CLK_40M,LOCKED); ICON U3 (CONTROL0); VIO U4 (CONTROL0,{enable,data}); /* پایان ماژول */ endmodule |
مشخص کردن پین های FPGA
1 2 3 4 5 6 7 8 9 10 11 |
// www.octacore.ir //DAC PINs NET"cs"LOC=P116; NET"ldac"LOC=P111; NET"sck"LOC=P115; NET"mosi"LOC=P114; NET"shdn"LOC=P112; //Public PINs NET"CLK_24M"LOC=P50; |
بررسی نتیجه نهایی گرفته شده
ضمیمه
خرید سخت افزار مورد نیاز
اگر علاقه مند به انجام این پروژه هستید و نیاز به تهیه سخت افزار آن دارید می توانید به سایت پازج مراجعه کنید.
خرید ماژول مبدل دیجیتال به آنالوگ
اگر نیاز به تهیه ماژول داشتید دو پیشنهاد برای شما وجود دارد:
- خرید تنها PCB ماژول و اتصال و تهیه قطعات بر عهده خود شما باشد.
- خرید ماژول آماده.
اگر تمایل به خرید داشتید تا زمانی که در فروشگاه قرار نگرفته می توانید در قسمت نظرات پایین صفحه درخواست بدهید.
تشکر
توجه
چند نکته برای کسانی که تازه کار هستند:
- از هسته VIO برای برای مقدار دهی از PC به FPGA و مقدار خوانی از FPGA به PC استفاده کرده ایم.
- از هسته ICON برای تبادل و ارتباط بین FPGA (VIO) با PC (JTAG) استفاده شده است.
- از هسته CLK برای تولید کلاک مورد نظر استفاده شده است.
اگر سوالی داشتید یا به مشکلی بر خوردید و یا پیشنهادی برای این پروژه داشتید در قسمت نظرات وارد کنید.
تشکر

درباره محمد حسین اصفهانی
فعال در زمینه الکترونیک و سخت افزار . از انیشتین آموختم اگر A در زندگی موفق باشد، سپس A برابراست با X + Y + Z. کار X است ، بازی Y است و Z یعنی بسته نگهداشتن دهان و انجام دادن کارهاست.برای دیدن اطلاعات بیشتر از من اینجا کلیک کنید.
نوشته های بیشتر از محمد حسین اصفهانی
دیدگاهتان را بنویسید