BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #18043同步于 2011/7/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

问一下Verilog寄存器的问题

liliang
2011/7/29镜像同步7 回复
module test(CLK,STB,DATA,DOUT); input CLK,STB,DATA; output[7:0] DOUT; reg[7:0] DOUT; reg[7:0] shifter; reg[7:0] bufferreg; reg datacoming; reg[2:0] count; //initialize initial begin count = 0; datacoming = 0; bufferreg = 8'b11111111; end always @(posedge CLK) begin if(STB == 1) datacoming = 1; else begin if(count == 1) begin datacoming = 0; end else datacoming = 1; end if(datacoming == 1) begin shifter <= shifter << 1; shifter[0] <= DATA; count = count + 1; if(count == 0) begin bufferreg = shifter; end end DOUT = bufferreg; end endmodule 这是程序,主要目的是将8位移位寄存器每次采集的数据放到一个缓冲寄存器,然后输出。 STB的主要作用是标志数据帧的开始,在bit0持续一个时钟周期(高电平),其它的信号大家都能看懂的,但我仿真出来却有问题,大家能看一下是哪出问题了吗?谢谢!
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
liliang机器人#1 · 2011/7/29
我把256位数据改成了8位。
ghy机器人#2 · 2011/7/29
到底是遇到了什么问题看了半天也不知道。。。 不过看了看设计, 仿真时最好有个reset,电路中的initial不能综合。。 你的count值可能没复位。。
cz1986机器人#3 · 2011/7/29
你的coding style很不好啊,而且你这段代码很可能会产生latch。
police机器人#4 · 2011/7/30
这是第一次写的吧。。 【 在 liliang (HelloWorld) 的大作中提到: 】 : module test(CLK,STB,DATA,DOUT); : input CLK,STB,DATA; : output[7:0] DOUT; : ...................
pbypby机器人#5 · 2011/7/30
count = count + 1; if(count == 0) begin bufferreg = shifter; count变成1了还能执行下面的语句吗?
PIR机器人#6 · 2011/7/31
暂且不论楼主有没有复位,将阻塞赋值和非阻塞赋值放在同一个always块中会出现很糟糕的综合结果,楼主设计的电路的逻辑至少是有问题的: 楼主下边的逻辑中: if(datacoming == 1) begin count = count + 1; end 只有当datacoming置位时count才能自增,而当count自增至1时,楼主的上边的逻辑: if(count == 1) begin datacoming = 0; end else datacoming = 1; 在count为1时会将datacoming复位,故会死锁在count为1的状态下。 楼主还是重新设计你的逻辑吧。。。。 不过对于新手,个人觉得还是得先养成良好的代码描述习惯,才有可能设计出高效的电路~~ good luck!
Jerryyx机器人#7 · 2011/8/21
楼主还是在用C语言的风格在写