本帖最后由 qiantuo12345 于 2012-9-13 16:55 编辑
控制ADF4360 的 代码
顶层TransOut 的 参数 DataIn1, DataIn2,DataIn3
没办法赋值,就是没办法由外部模块传入,模块内部赋值
就没问题。
以上结论经示波器检查过。
不知道为啥,请各位大神帮忙看看代码。
芯片是CPLD,Altera EPM240t100C5N
外部晶振50MHz
//3-Set the N Counter Latch
//Send Data
//DATA Hold afier one SCLK pose-edge
//SCLK Max is 20Mhz
module TransOut( input wire [`DATA_L : 0] DataIn1,
input wire [`DATA_L : 0] DataIn2,
input wire [`DATA_L : 0] DataIn3,
input wire [1 : 0] DataSel,
output reg SCLK,
output reg LE,
output reg DA_OUT);
integer n,m = `DATA_L;
reg [`DATA_L : 0] Data;
reg [1 : 0] a = 2'b11;
[email=always@(DataIn1]always@(DataIn1[/email] or DataIn2 or DataIn3)
begin
//Preform the Data
//$display("in0 = %x\n",in0);
if(DataSel == 2'b01)
Data = 24'hff;
else if(DataSel == 2'b10)
Data = DataIn2;
else if(DataSel == 2'b11)
Data = DataIn3;
else
Data = 0;
//SCLK Pin Output,LE Pin Output
SCLK = `Lo;
LE = `Hi;
//Delay 5 units,LE set down
#5 LE = `Lo;
//Start the transform Clock
for(n = 0;n < `DATA_L;n = n + 1)
begin
SCLK = #`SCLK_F `Hi;
SCLK = #`SCLK_F `Lo;
end
#1 LE = `Hi;
end
//DATA Pin Output
always @(posedge SCLK)
begin
//Start Data TransForm,MSB First
if(m > 0)
begin
DA_OUT = Data[m];
m = m - 1;
end
else
begin
m = `DATA_L;
end
end
endmodule
//Test Top Module
module Top;
reg [`DATA_L : 0] d = 24'b111011101001;
reg [1:0] sel = 2'b11;
wire [`DATA_L : 0] r,ctrl;
wire sclk,out,le;
Create_R R(r);
// TransOut T(r,sclk,le,out);
SetADF S(ctrl);
TransOut T(.DataIn1(r),
.DataIn2(ctrl),
.DataIn3(d[`DATA_L : 0]),
.DataSel(sel[1:0]),
.SCLK(sclk),
.LE(le),
.DA_OUT(out));
endmodule |