自己编了一个并转串的verilog程序,但是modelsim仿真出来总是不对,求大神指导 5
自己编了一个并转串的verilog程序,但是modelsim仿真出来总是不对,并码的第一个bit总是不能出来,求大神指导~程序:modulep_to_s(p7,clk12...
自己编了一个并转串的verilog程序,但是modelsim仿真出来总是不对,并码的第一个bit总是不能出来,求大神指导~
程序:
module p_to_s(p7, clk12, bits0000);
input [6:0]p7;
input clk12;
output bits0000;
reg bits0000;
reg [6:0]data;
integer i=6;
always @ (posedge clk12)
begin
if(i==6)
begin
data[6:0]<=p7[6:0];
i=0;
bits0000<=data[6];
end
else
begin
i=i+1;
bits0000<=data[6-i];
end
end
endmodule 展开
程序:
module p_to_s(p7, clk12, bits0000);
input [6:0]p7;
input clk12;
output bits0000;
reg bits0000;
reg [6:0]data;
integer i=6;
always @ (posedge clk12)
begin
if(i==6)
begin
data[6:0]<=p7[6:0];
i=0;
bits0000<=data[6];
end
else
begin
i=i+1;
bits0000<=data[6-i];
end
end
endmodule 展开
3个回答
展开全部
把 integer i; 改成 reg[2:0] counter;
然后把你代码里的 i = i + 1 这句去掉,你这是纯粹的软件写法,如果在这里就成了阻塞赋值
和非阻塞赋值混用了,在春哗综合器里根本没法综合,纯粹是错误的写法, 不要听下面人说的
bits0000<=data[6-i]; 这是正确的写法,在时序电路里的always块都用这种写法。
去掉i= i + 1这句阻塞赋值语句后,在任意位置写一段always块:
always@(posedge clk12)begin
if (counter < 3'd6)
counter <= counter + 1'b1;
else
counter <= 3'b0;end
这祥森信一段谨轮实现自加功能
然后把你代码里的 i = i + 1 这句去掉,你这是纯粹的软件写法,如果在这里就成了阻塞赋值
和非阻塞赋值混用了,在春哗综合器里根本没法综合,纯粹是错误的写法, 不要听下面人说的
bits0000<=data[6-i]; 这是正确的写法,在时序电路里的always块都用这种写法。
去掉i= i + 1这句阻塞赋值语句后,在任意位置写一段always块:
always@(posedge clk12)begin
if (counter < 3'd6)
counter <= counter + 1'b1;
else
counter <= 3'b0;end
这祥森信一段谨轮实现自加功能
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的代码就写得不对
“bits0000<=data[6-i];”这团芦是软件的风格,不适用于闹或链硬件描述语言。液孙
“bits0000<=data[6-i];”这团芦是软件的风格,不适用于闹或链硬件描述语言。液孙
追问
那我应该怎么改呢?还是就直接重新写?
追答
并转串需要协议,不知道你是按什么协议转的,所以也无法判断你的对错。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只用于仿真应该是可以的,不过i应该定义成变量吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询