集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 5617|回复: 14

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

[复制链接]
竹林听雨早晨 发表于 2010-11-13 22:26:41 | 显示全部楼层 |阅读模式
这是我的程序
module signalcreat(clk,out);
    input clk;
    reg[5:0] data;
   
    reg a;
   
    output out;
    reg out;
     initial
     begin
         a=1;
     data=6'b100111;
     
    out=1;
   
     end
     
     always@(posedge clk)
     begin
         a<=data[5];//记录data移位之前的最高位
       data<=(data<<1);
       data[0]<=a;//将data原来的最高位反馈到移位后的data的最低位
      
        out<=data[5];
      
     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

本帖子中包含更多资源

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

x
 楼主| 竹林听雨早晨 发表于 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[5:0] data;
    output out;
    reg out;

always @(posedge clk )
        if(rst)
             data<=6'b100101;
        else
             begin
               out<=data[5];
               data<={data[4:0],data[5]};
             end

endmodule


这个修改后的可以
weibode01 发表于 2010-11-18 14:17:57 | 显示全部楼层
诶,是什么原因呢
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-18 19:56 , Processed in 0.081738 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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