8-3优先编码器怎么写verilog代码啊,我总是仿不对
我写的代码:moduleen(incode,outcode,s,gs,es);input[7:0]incode,s;output[2:0]outcode,gs,es;re...
我写的代码:
module en(incode,outcode,s,gs,es);
input[7:0]incode,s;
output[2:0]outcode,gs,es;
reg[2:0]outcode;
wire[7:0]incode;
wire s,gs,es;
wire[8:0]a;
wire[4:0]mc; //输入输出端口定义
assign a={s,incode};
assign mc={outcode,gs,es}; //输入输出端口的位拼接
always@(incode)
begin //outase语句
case(a)
9'b1XXXXXXXX: mc=5'b11111;
9'b011111111: mc=5'b11101;
9'b0XXXXXXX0: mc=5'b00010;
9'b0XXXXXX01: mc=5'b00110;
9'b0XXXXX011: mc=5'b01010;
9'b0XXXX0111: mc=5'b01110;
9'b0XXX01111: mc=5'b10010;
9'b0XX011111: mc=5'b10110;
9'b0X0111111: mc=5'b11010;
9'b001111111: mc=5'b11110;
endcase
end
endmodule
错了,一共10个err,都是这样的:
Error (10137): Verilog HDL Procedural Assignment error at en.v(22): object "mc" on left-hand side of assignment must have a variable data type
对了再追加100 展开
module en(incode,outcode,s,gs,es);
input[7:0]incode,s;
output[2:0]outcode,gs,es;
reg[2:0]outcode;
wire[7:0]incode;
wire s,gs,es;
wire[8:0]a;
wire[4:0]mc; //输入输出端口定义
assign a={s,incode};
assign mc={outcode,gs,es}; //输入输出端口的位拼接
always@(incode)
begin //outase语句
case(a)
9'b1XXXXXXXX: mc=5'b11111;
9'b011111111: mc=5'b11101;
9'b0XXXXXXX0: mc=5'b00010;
9'b0XXXXXX01: mc=5'b00110;
9'b0XXXXX011: mc=5'b01010;
9'b0XXXX0111: mc=5'b01110;
9'b0XXX01111: mc=5'b10010;
9'b0XX011111: mc=5'b10110;
9'b0X0111111: mc=5'b11010;
9'b001111111: mc=5'b11110;
endcase
end
endmodule
错了,一共10个err,都是这样的:
Error (10137): Verilog HDL Procedural Assignment error at en.v(22): object "mc" on left-hand side of assignment must have a variable data type
对了再追加100 展开
3个回答
展开全部
问题:(1)always里面必须是寄存器型,所以mc要改成寄存器型
(2)assign必须是用网线型,所以可以改用mc部分赋值的方法给端口
(3)case语句里面含有无关量“x" 要用casex,否则case里面永远不能匹配
(4)输入输出端口像你样写,S被理解成8位的输入,同理,gs,es被理解成3位输出
(5)always后的敏感变量列表中要加上s
module en(incode,outcode,s,gs,es);
input[7:0]incode;
input s;
output[2:0]outcode;
output gs,es;
wire[7:0]incode;
wire s,gs,es;
wire[8:0]a;
reg[4:0]mc; //输入输出端口定义
assign a={s,incode};
assign outcode=mc[4:2];
assign gs=mc[1];
assign es=mc[0];
always@(incode or s)
begin
casex(a)
9'b1XXXXXXXX: mc=5'b11111;
9'b011111111: mc=5'b11101;
9'b0XXXXXXX0: mc=5'b00010;
9'b0XXXXXX01: mc=5'b00110;
9'b0XXXXX011: mc=5'b01010;
9'b0XXXX0111: mc=5'b01110;
9'b0XXX01111: mc=5'b10010;
9'b0XX011111: mc=5'b10110;
9'b0X0111111: mc=5'b11010;
9'b001111111: mc=5'b11110;
endcase
end
endmodule
(2)assign必须是用网线型,所以可以改用mc部分赋值的方法给端口
(3)case语句里面含有无关量“x" 要用casex,否则case里面永远不能匹配
(4)输入输出端口像你样写,S被理解成8位的输入,同理,gs,es被理解成3位输出
(5)always后的敏感变量列表中要加上s
module en(incode,outcode,s,gs,es);
input[7:0]incode;
input s;
output[2:0]outcode;
output gs,es;
wire[7:0]incode;
wire s,gs,es;
wire[8:0]a;
reg[4:0]mc; //输入输出端口定义
assign a={s,incode};
assign outcode=mc[4:2];
assign gs=mc[1];
assign es=mc[0];
always@(incode or s)
begin
casex(a)
9'b1XXXXXXXX: mc=5'b11111;
9'b011111111: mc=5'b11101;
9'b0XXXXXXX0: mc=5'b00010;
9'b0XXXXXX01: mc=5'b00110;
9'b0XXXXX011: mc=5'b01010;
9'b0XXXX0111: mc=5'b01110;
9'b0XXX01111: mc=5'b10010;
9'b0XX011111: mc=5'b10110;
9'b0X0111111: mc=5'b11010;
9'b001111111: mc=5'b11110;
endcase
end
endmodule
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
展开全部
楼主,83编码器不就是对输入的8路信号进行编码,送出一个3位的值。因为3bit可以足够表示到8。
首先,你always里面,给mc赋值,外面又进行了位拼接?你的输出不是outcode么?看不懂你写了。我写了个,你参考下。
8-3 优先编码器
module encoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);
output none_on;
output[2:0] outcode;
input a,b,c,d,e,f,g,h;
reg[3:0] outtemp;
assign {none_on,outcode}=outtemp;
always @(a or b or c or d or e or f or g or h)
begin
if(h) outtemp=4'b0111;
else if(g) outtemp=4'b0110;
else if(f) outtemp=4'b0101;
else if(e) outtemp=4'b0100;
else if(d) outtemp=4'b0011;
else if(c) outtemp=4'b0010;
else if(b) outtemp=4'b0001;
else if(a) outtemp=4'b0000;
else outtemp=4'b1000;
end
endmodule
首先,你always里面,给mc赋值,外面又进行了位拼接?你的输出不是outcode么?看不懂你写了。我写了个,你参考下。
8-3 优先编码器
module encoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);
output none_on;
output[2:0] outcode;
input a,b,c,d,e,f,g,h;
reg[3:0] outtemp;
assign {none_on,outcode}=outtemp;
always @(a or b or c or d or e or f or g or h)
begin
if(h) outtemp=4'b0111;
else if(g) outtemp=4'b0110;
else if(f) outtemp=4'b0101;
else if(e) outtemp=4'b0100;
else if(d) outtemp=4'b0011;
else if(c) outtemp=4'b0010;
else if(b) outtemp=4'b0001;
else if(a) outtemp=4'b0000;
else outtemp=4'b1000;
end
endmodule
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你一定要用case语句完成?可以用别的吧?我看你的程序不是优先编码器呢.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |