Verilog请求帮忙修改一下 一个简单程序 我是生手
发布网友
发布时间:2023-12-11 17:19
我来回答
共3个回答
热心网友
时间:2024-12-05 07:43
mole choose(
input wire data_clk
,input wire RESET
,input wire [8:0] cdin
,output reg data_out
,output reg END
,output reg dic_clr
);
always @(posedge data_clk ) begin
if(!RESET) begin
END <= 1'b0;
data_out <= 1'b0;
dic_clr <= 1'b0;
end
else begin
case(cdin)
510 : dic_clr <= 1'b1;
511 : END <= 1'b1;
default : data_out <= (!END)? 1'b0 : cdin;
endcase
end
end
endmole
其实你应该把功能描述得更清楚一些别人才能给你回答。
qq522161657追问输入510就有一个清空标志: dic_clr (高有效,别的模块控制信号)511就 END (结束输出标志,高有效) 输入别的数据就直接输出,其他就没有什么要求了
热心网友
时间:2024-12-05 07:43
mole choose(data_clk, RESET,cdin,data_out,END,dic_clr);
input [8:0] cdin;
input data_clk, RESET;
//output wire [8:0] data_out; //改为output reg [8:0] data_out;
//output dic_clr, END; // 改为output reg dic_clr,END;
always@(posedge data_clk )
begin
if((!RESET)||(!END))
assign data_out=0;
else
case(cdin)
510: dic_clr<=1;
511:END<=1;
default:assign data_out=cdin;
endcase
end
endmole
只要该输出为reg型就可以了,主要是你后面都是寄存器,如语句:data_out=0;
510: dic_clr<=1;
511:END<=1;
而你采用wire是错误的,
热心网友
时间:2024-12-05 07:44
assign是连续赋值,不应该在always里,如果你想连续赋值的话就直接放在always块外,如果不是连续赋值的话,就把前面的assign去掉。