找回密码
 注册
搜索
查看: 1085|回复: 2

[讨论] 帮忙改正QPSK的Verilog程序

[复制链接]
发表于 2008-4-2 16:35:14 | 显示全部楼层 |阅读模式
大侠帮忙改改!
module dds(freq_con,clk,reset,sin,en,i,q);
    input [15:0] freq_con;
    input en;
    input clk;
    input reset;
    input i,q;           
    output [7:0] sin;

reg [19:0] add_a;
reg [19:0] add_b;
reg [7:0] sin_dr;
wire [15:0] freq_con;
wire [9:0] ROM_A;
wire [7:0] sin_d;


assign sin=sin_dr;
assign ROM_A=add_b[19:10];


always@(posedge clk or posedge reset)
begin
if(reset)
add_a<=20'b00000000000000000000;
else if(en)
add_a<=freq_con;
end

  always@(posedge clk or posedge reset)
begin
if(reset)
add_b<=0;
else if(en)
  add_b<=add_a+add_b;
  end

  always@(posedge clk or posedge reset)
begin
if(reset)
sin_dr<=0;
else if(en)
    begin
  sin_dr<=sin_d;
    end
end


   always@(i or q)
     case({i,q})
   2'b00:begin add_b<=20'b00000000000000000000;end      这个出错了!why?怎么改?
   2'b01:begin add_b<=20'b00111111110000000000;end      通过改变读取的起始地址
   2'b10:begin add_b<=20'b01111111110000000000;end      想输出0、90、180、270的正弦波形
   2'b11:begin add_b<=20'b10111111110000000000;end      但出错了?
   endcase

  rom_sin rom_sin(
.addr(ROM_A),
.clk(clk),                                这个通过读取存在ROM表的1024个点产生正弦波,
.en(en),
.dout(sin_d)
);

endmodule

邮箱:xiaomao_8384@163.com
发表于 2008-4-15 11:10:38 | 显示全部楼层
好像一个REG变量只能有一个驱动源头吧。。。。
点评回复

使用道具 举报

发表于 2008-7-14 15:07:40 | 显示全部楼层
兄弟,寄存器类型的变量(add_b)不能在一个以上的always块中进行多次赋值,把第二个always块语句和最后一个合并就不会出错了。
[br]<p align=right><font color=red>+5 RD币</font></p>
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-24 07:00 , Processed in 0.045749 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表