在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5573|回复: 10

verilog语言求纠错

[复制链接]
发表于 2012-5-22 22:38:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
小弟乃verilog新手,一下这段程序问题出在哪呢?为什么波形仿真不正确?求各位大仙指教

module BCD_cnt59(qout,cin,reset,clk);
output[7:0] qout;
reg[7:0]qout;
input cin,clk,reset;
always@(posedge clk )
begin
  if(reset)
  qout<=0;
   else if(cin)
      begin
         if(qout[3:0]==4'd0)
         begin
            qout[3:0]<=9;
      if(qout[7:4]==0)
              qout[7:4]<=5;
    else
     qout[7:4]=qout[7:4]-1'b1;
    end
else qout[3:0]<=qout[3:0]-1'b1;
end
end
endmodule

module BCD(in,out);
output[6:0]out;
input[3:0]in;
reg[6:0]out;
always@(in)
begin
case(in)
      4'd0ut=7'b1111110;
      4'd1ut=7'b0110000;
      4'd2ut=7'b1101101;
      4'd3:out=7'b1111001;
      4'd4:out=7'b0110011;
      4'd5:out=7'b1011011;
      4'd6:out=7'b1011111;
      4'd7:out=7'b1110000;
      4'd8:out=7'b1111111;
      4'd9:out=7'b1111011;
      
default:out=7'bx;

endcase
end
endmodule
module top (out1,out2,clk,reset,cin);
output[6:0] out1,out2;
input clk,reset,cin;
wire [7:0] qout;
BCD_cnt59 u1(qout,cin,clk,reset);
BCD u2 (qout[7:4],out2);
BCD u3 (qout[3:0],out1);
endmodule
 楼主| 发表于 2012-5-23 11:02:00 | 显示全部楼层
高人给看看呗
发表于 2012-5-23 11:35:00 | 显示全部楼层
module BCD_cnt59(qout,cin,reset,clk);
output[7:0] qout;
reg[7:0]qout;
input cin,clk,reset;
always@(posedge clk )
begin
   if(reset)
   qout[3:0]<=4'b0;
    else if(cin)
      begin
        if(qout[3:0]==4'd0)
           qout[3:0]<=9;
         else
            qout[3:0]<=qout[3:0]-1'b1;
     end
end
        
always@(posedge clk )
begin
   if(reset)
   qout[7:4]<=4'b0;
    else if(cin)
      begin
        if(qout[7:4]==4'd0)
           qout[7:4]<=4'd5;
         else
            qout[7:4]<=qout[7:4]-1'b1;
     end
end
endmodue
估计这才是你想表达的吧,你那个太复杂了,你说是波形问题,我就改了代码的内容而不是形式
我直接在这儿写的  你自己debug 一下.下面一个模块很清晰
 楼主| 发表于 2012-5-23 18:22:56 | 显示全部楼层
回复 3# xslin2012


    好的,谢谢你。我试一下
 楼主| 发表于 2012-5-23 20:38:09 | 显示全部楼层

波形图

波形图
问题还是没解决,旁边是程序的波形截图,烦劳大家看看
发表于 2012-5-23 23:50:22 | 显示全部楼层
Capture.JPG
你是不是想要这样的结果?(我按照我自己的习惯改了很多,qoutH,qoutL,也不用output)
module top (out1,out2,qoutH,qoutL,clk,reset,cin);
output[6:0] out1,out2;
reg[6:0] out1,out2;
input clk,reset,cin;
output[3:0] qoutH,qoutL;
reg [3:0] qoutH,qoutL;
always @(posedge clk)
begin
      if(reset)begin qoutH=4'h0;qoutL=4'h0;end
      else if(cin)
          begin
             if(qoutL==4'h0)
                 begin
                    qoutL[3:0]=4'h9;
                    if(qoutH==4'h0) qoutH=4'h5;
                    else qoutH=qoutH-1;
                end
            else qoutL=qoutL-1;
          end
    BCD(out2,qoutH);
    BCD(out1,qoutL);
end

task BCD;
output[6:0] out;
input[3:0]in;
begin
    case(in)
          4'h0ut=7'b1111110;
          4'h1ut=7'b0110000;
          4'h2ut=7'b1101101;
          4'h3:out=7'b1111001;
          4'h4:out=7'b0110011;
          4'h5:out=7'b1011011;
          4'h6:out=7'b1011111;
          4'h7:out=7'b1110000;
          4'h8:out=7'b1111111;
          4'h9:out=7'b1111011;   
    default:out=7'hx;
    endcase
end
endtask

endmodule
发表于 2012-5-24 11:17:58 | 显示全部楼层
你检查 一下自己的reset 信号,波形上没有啊
发表于 2012-5-24 12:31:39 | 显示全部楼层
你是调用的时候 reset clk 弄反了
module top (        out1,
                out2,
                clk,
                reset,
                cin);

output        [6:0]         out1,out2;
input                 clk,reset,cin;
wire         [7:0]         qout;

BCD_cnt59 u1(qout,cin,clk,reset);
BCD u2 (qout[7:4],out2);
BCD u3 (qout[3:0],out1);

endmodule


module BCD_cnt59(        qout,
                        cin,
                        clk,
                        reset);
output        [7:0]         qout;
input                 cin;
input                clk;
input                reset;
reg        [7:0]        qout;
always@(posedge clk )
begin
    if(reset)
    qout[3:0]<=4'b0;
     else if(cin)
       begin
         if(qout[3:0]==4'd0)
            qout[3:0]<=9;
          else
             qout[3:0]<=qout[3:0]-1'b1;
      end
end
         
always@(posedge clk )
begin
    if(reset)
    qout[7:4]<=4'b0;
     else if(cin)
       begin
         if(qout[7:4]==4'd0)
            qout[7:4]<=4'd5;
          else
             qout[7:4]<=qout[7:4]-1'b1;
      end
end
endmodule


module BCD(        in,
                out);


output        [6:0]        out;
input        [3:0]        in;
reg        [6:0]        out;

always@(in)
begin
        case(in)
       4'd0ut=7'b1111110;
       4'd1ut=7'b0110000;
       4'd2ut=7'b1101101;
       4'd3:out=7'b1111001;
       4'd4:out=7'b0110011;
       4'd5:out=7'b1011011;
       4'd6:out=7'b1011111;
       4'd7:out=7'b1110000;
       4'd8:out=7'b1111111;
       4'd9:out=7'b1111011;
      
        default:out=7'bx;
        endcase
end
endmodule
 楼主| 发表于 2012-5-24 17:06:09 | 显示全部楼层
回复 8# xslin2012

谢谢你!确实是这个问题。另外你的程序里也有些错误,我想做的是59到0的计时器,你的程序没有表达出各位变成0之后十位再改变这个意思吧?
   另外,我想在加一个20MHz--1HZ的分频器在这个模块中,程序我已经写好,如下
module time1Hz(clk1Hz, clk_20M);
input clk_20M;
output clk1Hz;
reg[24:0] temp_count;
initial
temp_count <= 25'b0;
always @ (posedge clk_20M)
if (temp_count == 25'b1_0011_0001_0010_1101_0000_0000)
temp_count <= 25'b0;
else
temp_count <= temp_count + 1;
assign clk1Hz = temp_count[25];
endmodule
问题是怎么用顶层调用模块来调用它呢?顶层调用模块该怎么写?求指点!
发表于 2012-5-25 10:55:41 | 显示全部楼层
回复 4# 天行者郑
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 20:36 , Processed in 0.036008 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表