module douki_tx_rx(clk,indata,sin,douki,freq_mod); input clk; input signed [15:0] indata; input signed [15:0] sin; input douki; output [31:0] freq_mod; reg signed [31:0] multi; always@(posedge clk)begin multi <= indata*sin/4096; end // Vo=integ(Vi-Vo/CR) reg signed [31:0] freq_mod_offset; reg signed [31:0] freq_mod; always@(posedge clk)begin if(douki==1) freq_mod_offset <= freq_mod_offset + (multi-freq_mod_offset)/256; else freq_mod_offset <= freq_mod_offset; end always@(posedge clk)begin freq_mod <= 582542222+freq_mod_offset; end endmodule