需要把d,pulse定义成reg型才可以在左侧赋值,默认是wire型的
生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
端口类型如果不定义的话,默认为wire类型
在alwys模块中赋值的变量一般要定义为reg类型
“d”和“pulse”你如果没有定义类型,又在always模块里赋值,就冲突了
改正1:把他们定义为reg类型
2:用连续赋值语句assign给他们赋值,
以后这种报错的,最好把源程序贴出来,这样别人能更好的帮助你,像你这样,我们还得猜是哪种情况
input clk;
input Dir; //方向控制
input StepEnable; //开始,停止
input onestep; //单步
input jiasu; //加速
input jiansu; //减速
output pulse;
output d;
output en;
reg[9:0] i=10'b0000000000; //转的步数
reg pul=1'b0;
reg[31:0] StepCounter = 32'b0;
reg[31:0] StepLockOut = 32'd3000; //250HZ
reg[31:0] j= 32'd0;
always @(posedge clk or Dir) //方向控制
begin
if(Dir==1'd0)
d<=1'd0;
else d<=1'd1;
end
always @(posedge jiasu) //加速
begin
if((StepLockOut+j)==32'd500) ;
else StepLockOut <= StepLockOut - 32'd500;
end
always @(posedge jiansu) //减速
begin
if((StepLockOut+j)==32'd10000) ;
else j<= j + 32'd500;
end
always @(posedge clk or negedge onestep)
begin
if ( !onestep)
begin
pul<=1'b0;
StepCounter <= 32'b0;
i<=10'b0000000000;
end
else if(StepEnable==1'b0) //一直转
begin
StepCounter <= StepCounter + 31'b1 ;
if (StepCounter >= (StepLockOut+j))
begin
StepCounter <= 32'b0 ;
pul<= ~pul;
pulse <= pul;
end
end
else begin
if (StepEnable==1'b1 && i<10'b1111111100) //单步转
StepCounter <= StepCounter + 31'b1 ;
if (StepCounter >= (StepLockOut+j))
begin
StepCounter <= 32'b0 ;
i<=i+10'b0000000001;
pul<= ~pul;
pulse= pul;
end
end
end
这是源程序,是学长给我的,他自己好像可以用,我在自己电脑上第一步仿真就不行了,还有怎么进行模块设置?
楼主,谢谢你的共享,几点小建议
1. 请把所有的alway语句全部统一成如下,
always @(posedge clk or negedge rst_n)
时钟必须统一,异步复位的话,上位模块肯定有。
2. 把jiasu, jiansu, Dir等都看成信号,写到 “always @(posedge clk or negedge rst_n)”语句里面
3.module 的输入输出端口,全大写,
4.内部信号全部小写
然后,你的问题,
就可以这样解决
module
output D;
reg d;
always ..
d <=
assign D = d;
endmodule
MicroPython中文社区https://micropython.org.cn/forum/