竹林听雨早晨 发表于 2010-11-13 22:26:41

球verilog高手帮忙,我的程序怎么结果不对呀???

这是我的程序
module signalcreat(clk,out);
    input clk;
    reg data;
   
    reg a;
   
    output out;
    reg out;
   initial
   begin
         a=1;
   data=6'b100111;
   
    out=1;
   
   end
   
   always@(posedge clk)
   begin
         a<=data;//记录data移位之前的最高位
       data<=(data<<1);
       data<=a;//将data原来的最高位反馈到移位后的data的最低位
      
      out<=data;
      
   end
   
   initial #1000 $stop;
endmodule

测试模块是
`timescale 10ns/1ns
module signalcreat_tb;
    reg clk;
    wire out;
   
    initial
    clk=0;
   
    always
   #5 clk=~clk;
   
   
signalcreat   U(clk,out);
initial $monitor($time,,,"clk=%d out=%d",clk,out);
endmodule

竹林听雨早晨 发表于 2010-11-13 22:27:30

我写的是100111序列信号发生器

IPO 发表于 2010-11-14 04:48:32

顶…………

weibode01 发表于 2010-11-14 09:25:14

我觉得问题是不是你只定义了一个DATA,然后你移位后,又把其中的一个数放进去,这个有点不合理吧,你应该再多定义一个中间变量啊。。。。

竹林听雨早晨 发表于 2010-11-14 20:27:05

回复 4# weibode01


    怎么定义啊帮帮我吧

youdeworld 发表于 2010-11-14 21:46:19

变量a是不是应该定义成1位?

weibode01 发表于 2010-11-17 10:34:54

就是多一个REG变量啊。。。。

weibode01 发表于 2010-11-17 10:49:33

不行,你的思路好像是单片机的逐条执行吧。。。如果你想产生100111信号的话,我觉得用状态机还好一点。。。

xuanyuanchen 发表于 2010-11-17 22:20:06

回复 1# 竹林听雨早晨


    module sigcreat(clk,rst,out);
    input clk,rst;
    reg data;
    output out;
    reg out;

always @(posedge clk )
        if(rst)
             data<=6'b100101;
        else
             begin
             out<=data;
             data<={data,data};
             end

endmodule


这个修改后的可以

weibode01 发表于 2010-11-18 14:17:57

诶,是什么原因呢
页: [1] 2
查看完整版本: 球verilog高手帮忙,我的程序怎么结果不对呀???