|
楼主 |
发表于 2008-11-16 23:54:41
|
显示全部楼层
我如果把两个always块合在一起,
always @(posedge clk,posedge enable...)
begin
if(clk) star<=1;
if(enable) star<=0;
end
编译是能够通过但是警告好多,说star在不同的分支下保存了先前的值。
这样搞还是不保险。
我之前搞信号量来的警告没有,但是太不方便啦
这个是我做transmiter的代码
module UTAR(Tx,empty,had_accept,rst,brand,clean_empty,send_me_data,data);
output Tx,empty,had_accept;
reg had_accept,empty,Tx;
input rst,clean_empty,send_me_data;
input brand;
input[7:0] data;
reg[9:0] transmit_data;
reg star_transmit; //开始传送信号
integer i;
reg star_transmit_hand,empty_hand; //always之间的握手信号
always @(posedge send_me_data or negedge rst) //对锁存器的握手信号处理
begin
if(!rst) begin
had_accept<=0;star_transmit<=0;
end
else begin
transmit_data<=(data<<1)|(1<<9);
had_accept<=1;
if(star_transmit_hand) star_transmit<=0;
else star_transmit<=1;
end
end
always @(posedge brand or negedge rst)
begin
if(!rst) begin
Tx<=1;i<=0;star_transmit_hand<=0;empty_hand<=0; //复位后TX一直发送停止位
end
else if(star_transmit) //接受到了新数据
begin
if(i>9) begin //传输完毕
i<=0;
star_transmit_hand<=1; //更改star_transmit状态的握手信号
empty_hand<=1; //更改empty_transmit状态的握手信号
end
else begin
Tx<=transmit_data;i<=i+1; //移位传输数据
star_transmit_hand<=0; //更改star_transmit状态的握手信号
empty_hand<=0; //更改empty_transmit状态的握手信号
end
end
end
always @(posedge clean_empty or negedge rst or posedge empty_hand)
begin
if(!rst) empty<=0;
else begin
if(empty_hand) empty<=1; //clena_empty和empty信号在
else empty<=0;
end
end
endmodule
为了在不同的always中改变empty和star_transmit加了信号量,太麻烦啦。不知道有什么办法解决没有,
http://ouravr.com/bbs/bbs_content.jsp?bbs_sn=861191&bbs_page_no=1&search_mode=1&search_text=driver&bbs_id=9999
这个跟我一样是同样的问题,我在去看看到底那样在两个always中对一个变量赋值会有什么不保险的地方,大家帮我出点注意好吗 |
|