liudingding 发表于 2017-8-15 11:08:21

看看这段verilog程序应该如何修改


下面这段程序,B、C、D中,D需要与时钟相与,结果仿真D与B、C就不一样了,B、C只在对应时钟时是一个脉冲,D变为高电平后就一直为高电平了,计数器清零也为高电平,这是为什么?

module CS(PCK,mx,D,B,C);
input PCK;
output mx;
output D,B,C;
reg mx;    //鍐欏湴鍧€
reg DT;
reg B,C;
always @ (posedge KA )
begin
      D=0;
      B=0;
      C=0;
   mx<=mx+1;
if(mx==48) D=1;
if(mx==28) B=1;
if(mx==18) C=1;
end
assign KA= PCK||D;


endmodule



3DA502 发表于 2017-8-15 11:20:10

本帖最后由 3DA502 于 2017-8-15 11:25 编辑

楼主,你还是不懂HDL,这是图形描述语言,不是程序,没有顺序判断这东西,你所写的,对应的都是LE查找表和flipflop


always @ (posedge KA )
begin
   mx<=mx+1;
end

assign D = (MX== 48)?1:0;
assign B = (MX== 48)?1:0;
assign C = (MX== 48)?1:0;

或者同步逻辑


always @ (posedge KA )
begin
   mx<=mx+1;
end

always @ (nedeage KA )
begin
   if(MX== 48) D<<=1;
else D<<= 0;
end

liudingding 发表于 2017-8-15 12:47:01

3DA502 发表于 2017-8-15 11:20
楼主,你还是不懂HDL,这是图形描述语言,不是程序,没有顺序判断这东西,你所写的,对应的都是LE查找表和f ...

我输入
assignB=(mx==15)?1:0;
怎么编译出错:object "B" on left-hand side of assignment must have anettype

liudingding 发表于 2017-8-15 12:57:26

改成wire B,C,D好了
页: [1]
查看完整版本: 看看这段verilog程序应该如何修改