天天看點

【FPGA】使用Verilog程式設計通過ModelSim實作2FSK調制解調仿真③(信号調制仿真)

Verilog編寫2FSK第③步信号的調制

上一篇編寫了2FSK調制信号的程式,本節編寫信号調制的子程式

  • 2FSK二進制頻移鍵控,FSK 是用不同頻率的載波來傳遞數字消息的。
  • 例如:f1=sin2πw f2=sin4πw 傳輸f1時代表’0’傳輸f2時是’1’
module modulation(clk,DDSin,DA_Data,DA_Data2,DDS_out);//定義子產品和端口
input clk;//輸入的時鐘
input DDSin;//需要調制的信号
input wire [10:0]DA_Data;//輸入的載波=‘0’
input wire [10:0]DA_Data2;//輸入的載波=‘1’
output wire[10:0]DDS_out;//輸出的調制完成的信号
reg [10:0]canshu;//子產品定義内部寄存器
always @(posedge clk)//每當時鐘上升沿時觸發
begin
if(DDSin==0)//如果輸入的基帶信号為0則輸出位載波1
canshu<=DA_Data;
else //如果輸入的基帶信号為1則輸出位載波2
canshu<=DA_Data2;
end
assign DDS_out=canshu;//
endmodule
           
  • 子子產品編寫完成後編寫頂層檔案
module DDS_top(
input clk,
output wire [10:0]DA_Data,
output wire [10:0]DA_Data2,
output wire [10:0]DDS_out,
input canshu
);
DDS DDS(//例化上節的載波生成的子產品
.clk(clk),
.DA_Data(DA_Data),
.DA_Data2(DA_Data2)
);

modulation modulation(
.clk(clk),
.DDSin(canshu),
.DA_Data(DA_Data),
.DA_Data2(DA_Data2),
.DDS_out(DDS_out)
);
endmodule
           
  • 最後編寫tb仿真檔案
`timescale  1ms/1ms
module DDS_tb;//因為是仿真檔案不用進行端口設定,該檔案裡的參數都會在wave中顯示
wire [10:0]DA_Data;
wire [10:0]DA_Data2;
wire [10:0]DDS_out;
reg clk;
reg canshu=0;
DDS_top DDS_top(
.clk(clk),
.DA_Data(DA_Data),
.DA_Data2(DA_Data2),
.DDS_out(DDS_out),
.canshu(canshu)
);
initial clk=1;
always #5 clk=~clk;
endmodule
           
  • 仿真運作檔案,根據上一節将參數操作後可直覺的檢視波形

    當基帶為0時即canshu<=0;改變canshu的值為‘1’或者‘0’可觀測到DDS_out即調制信号會變化

    【FPGA】使用Verilog程式設計通過ModelSim實作2FSK調制解調仿真③(信号調制仿真)
    【FPGA】使用Verilog程式設計通過ModelSim實作2FSK調制解調仿真②(調用.mif生成2FSK載波波形——DDS)

【FPGA】使用Verilog程式設計通過ModelSim實作2FSK調制解調仿真①( MATLAB生成.mif檔案)