assign fre_word = (wenreg_dds) ? wdatareg_dds[7:0] : fre_word;的意思
时间: 2024-04-07 16:29:13 浏览: 55
这是一个Verilog语言中的赋值语句,其中包含了一个三目运算符(?:)。它的意思是:如果 wenreg_dds 为真,则将 wdatareg_dds[7:0] 的值赋给 fre_word,否则不改变 fre_word 的值。其中,wenreg_dds、wdatareg_dds 和 fre_word 都是Verilog中的变量。
相关问题
module DDS( input Clk, //系统时钟 input Rst_n, //系统复位 //input EN, //DDS模块使能 //input [31:0]Fword, //频率控制字 //input [11:0]Pword, //相位控制字 output DA_Clk, //DA数据输出时钟 output [7:0]DA_Data, //D输出输出A input FWORD_T_a , input FWORD_T_b , input PWORD_T_a , input PWORD_T_b ); reg [31:0]Fre_acc; reg [11:0]Rom_Addr; integer i = 0; reg [31:0]Fword = 32'd500; reg [11:0]Pword = 12'd0; /*---------------FPGA输入控制------------------*/ always @(posedge Clk or negedge Rst_n) begin if(!Rst_n) begin EN_T = 0; FWORD_T_a = 0; FWORD_T_b = 0; PWORD_T_a = 0; PWORD_T_b = 0; end else begin if(FWORD_T_a == 1) begin if(Fword <= 32'd1000&&Fword >= 32'd100 ) begin Fword <= Fword+32d'100; end end if(FWORD_T_b == 1) begin if(Fword <= 32'd1000&&Fword >= 32'd100 ) begin Fword<=Fword-32d'100; end end if(PWORD_T_a == 1) begin if(Pword <= 12'd4094&&Pword >= 12'd0 ) begin Pword <= Pword +12d'1024; end end if(PWORD_T_b == 1) begin if(Pword <= 12'd4094&&Pword >= 12'd0 ) begin Pword <= Pword - 12d'1024; end end end end /*---------------相位累加器------------------*/ always @(posedge Clk or negedge Rst_n) if(!Rst_n) Fre_acc <= 32'd0; else if(!EN) Fre_acc <= 32'd0; else Fre_acc <= Fre_acc + Fword; /*----------生成查找表地址---------------------*/ always @(posedge Clk or negedge Rst_n) if(!Rst_n) Rom_Addr <= 12'd0; else if(!EN) Rom_Addr <= 12'd0; else Rom_Addr <= Fre_acc[31:20] + Pword; /*----------例化查找表ROM-------*/ ROM ddsrom( .address(Rom_Addr), .clock(Clk), .q(DA_Data) ); /*----------输出DA时钟----------*/ assign DA_Clk = (EN)?Clk:1'b1; endmodule
这是一个 Verilog HDL 语言编写的 DDS(直接数字合成器)模块。它实现了频率和相位的控制,同时输出 DA 数据和 DA 时钟。其中,Fword 和 Pword 分别为频率控制字和相位控制字,通过 FWORD_T_a、FWORD_T_b、PWORD_T_a、PWORD_T_b 控制增加或减少。Fre_acc 是频率累加器,计算当前所需的频率,Rom_Addr 是查找表地址,根据 Fre_acc 和 Pword 计算得到。最后,DA 数据通过查找表 ROM 输出。
阅读全文