根据题目真值表把情况全部列出来,纯体力活。
`timescale 1ns/1ns
module comparator_4(
input [3:0] A ,
input [3:0] B ,
output wire Y2 , //A>B
output wire Y1 , //A=B
output wire Y0 //A<B
);
assign Y2 = (A[3]&~B[3])||((~A[3]^B[3])&&(A[2]&~B[2]))||((~A[3]^B[3])&&(~A[2]^B[2])&&(A[1]&~B[1]))||((~A[3]^B[3])&&(~A[2]^B[2])&&(~A[1]^B[1])&&A[0]&~B[0]);
assign Y1 = (~A[3]^B[3])&&(~A[2]^B[2])&&(~A[1]^B[1])&&(~A[0]^B[0]);
assign Y0 = (~A[3]&B[3])||((~A[3]^B[3])&&(~A[2]&B[2]))||((~A[3]^B[3])&&(~A[2]^B[2])&&~A[1]&B[1])||((~A[3]^B[3])&&(~A[2]^B[2])&&(~A[1]^B[1])&&(~A[0]&B[0]));
endmodule
最直接的方法:把题目给的公式直接翻译成Verilog。
`timescale 1ns/1ns
module lca_4(
input [3:0] A_in ,
input [3:0] B_in ,
input C_1 ,
output wire CO ,
output wire [3:0] S
);
wire [3:0]G;
wire [3:0]P;
wire [2:0]C;
assign G = A_in & B_in;
assign P = A_in ^ B_in;
assign S = P ^ {C,C_1};
assign {CO,C} = G | (P&{C,C_1});
endmodule
注意I1~I9的顺序。
`timescale 1ns/1ns
module encoder_0(
input [8:0] I_n ,
output reg [3:0] Y_n
);
always@(*)
begin
casex(I_n)
9'b111_111_111:Y_n=4'b1111;
9'b0xx_xxx_xxx:Y_n=4'b0110;
9'b10x_xxx_xxx:Y_n=4'b0111;
9'b110_xxx_xxx:Y_n=4'b1000;
9'b111_0xx_xxx:Y_n=4'b1001;
9'b111_10x_xxx:Y_n=4'b1010;
9'b111_110_xxx:Y_n=4'b1011;
9'b111_111_0xx:Y_n=4'b1100;
9'b111_111_10x:Y_n=4'b1101;
9'b111_111_110:Y_n=4'b1110;
default:Y_n=0;
endcase
end
endmodule
将9-4编码器拓展成10-4编码器。因为高位优先级更高,所以高9位直接输入优先编码器,最低位等于0且其余位全部为1时,输出为0。
`timescale 1ns/1ns
module encoder_0(
input [8:0] I_n ,
output reg [3:0] Y_n
);
always @(*)begin
casex(I_n)
9'b111111111 : Y_n = 4'b1111;
9'b0xxxxxxxx : Y_n = 4'b0110;
9'b10xxxxxxx : Y_n = 4'b0111;
9'b110xxxxxx : Y_n = 4'b1000;
9'b1110xxxxx : Y_n = 4'b1001;
9'b11110xxxx : Y_n = 4'b1010;
9'b111110xxx : Y_n = 4'b1011;
9'b1111110xx : Y_n = 4'b1100;
9'b11111110x : Y_n = 4'b1101;
9'b111111110 : Y_n = 4'b1110;
default : Y_n = 4'b1111;
endcase
end
endmodule
module key_encoder(
input [9:0] S_n ,
output wire[3:0] L ,
output wire GS
);
wire [3:0]Y;
encoder_0 u0(
.I_n(S_n[9:1]),
.Y_n(Y)
);
assign GS = !(Y==4'b1111&&S_n[0]);
assign L = (~S_n[0]&&Y==4'b1111)?0:~Y;
endmodule
也是纯体力活。。。
`timescale 1ns/1ns
module encoder_83(
input [7:0] I ,
input EI ,
output wire [2:0] Y ,
output wire GS ,
output wire EO
);
assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
assign Y[1] = EI & (I[7] | I[6] | (~I[7]&~I[6]&~I[5]&~I[4]&I[3])|(~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&I[2]));
assign Y[0] = EI & (I[7] |(~I[7]&~I[6]&I[5])|(~I[7]&~I[6]&~I[5]&~I[4]&I[3])|(~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&I[1]));
assign GS = ~((~EI)|(I==0));
assign EO = (I==0);
endmodule
这题有点意思,数电里其实学过,但是有点不太记得了。
分析可知:高位优先级更高,所以当高位有效时,低位肯定是全0,所以此时需要关断低位使能,也就是把高位编码器的EO接到低位编码器的EI。
不难看出GS代表编码器正常工作,所以可以把两个编码器的GS相或输出。
高位正常工作时,最高位为1,与此编码器输出一致,所以可以把高位编码器的GS作为最高位。
低位时两个编码器输出相或,因为两个都是8位编码器,高八位有效时也只是最高位为1,其他位行为与低位一致。
`timescale 1ns/1ns
module encoder_83(
input [7:0] I ,
input EI ,
output wire [2:0] Y ,
output wire GS ,
output wire EO
);
assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
assign Y[1] = EI & (I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]);
assign Y[0] = EI & (I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]);
assign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];
assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);
//assign GS = EI&(| I);
endmodule
module encoder_164(
input [15:0] A ,
input EI ,
output wire [3:0] L ,
output wire GS ,
output wire EO
);
wire E;
wire GS0,GS1;
wire [2:0]Y0,Y1;
encoder_83 u0(
.I(A[15:8]),
.EI(EI),
.Y(Y0),
.GS(GS0),
.EO(E)
);
encoder_83 u1(
.I(A[7:0]),
.EI(E),
.Y(Y1),
.GS(GS1),
.EO(EO)
);
assign L={GS0,Y0|Y1};
assign GS=GS1|GS0;
endmodule
这题不难,只需要通过3-8译码器便可以实现任何三输入的组合逻辑。
`timescale 1ns/1ns
module decoder_38(
input E ,
input A0 ,
input A1 ,
input A2 ,
output reg Y0n ,
output reg Y1n ,
output reg Y2n ,
output reg Y3n ,
output reg Y4n ,
output reg Y5n ,
output reg Y6n ,
output reg Y7n
);
always @(*)begin
if(!E)begin
Y0n = 1'b1;
Y1n = 1'b1;
Y2n = 1'b1;
Y3n = 1'b1;
Y4n = 1'b1;
Y5n = 1'b1;
Y6n = 1'b1;
Y7n = 1'b1;
end
else begin
case({A2,A1,A0})
3'b000 : begin
Y0n = 1'b0; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b001 : begin
Y0n = 1'b1; Y1n = 1'b0; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b010 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b0; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b011 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b0;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b100 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b0; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
3'b101 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b0; Y6n = 1'b1; Y7n = 1'b1;
end
3'b110 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b0; Y7n = 1'b1;
end
3'b111 : begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b0;
end
default: begin
Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
end
endcase
end
end
endmodule
module decoder1(
input A ,
input B ,
input Ci ,
output wire D ,
output wire Co
);
wire Y0n,Y1n,Y2n,Y3n,Y4n,Y5n,Y6n,Y7n;
decoder_38 u0(
.E(1),
.A0(Ci),
.A1(B),
.A2(A),
.Y0n(Y0n),
.Y1n(Y1n),
.Y2n(Y2n),
.Y3n(Y3n),
.Y4n(Y4n),
.Y5n(Y5n),
.Y6n(Y6n),
.Y7n(Y7n)
);
assign D = ~Y4n||~Y7n||~Y1n||~Y2n;
assign Co = ~Y1n||~Y2n||~Y3n||~Y7n;
endmodule
`timescale 1ns/1ns
module decoder_38(
input E1_n ,
input E2_n ,
input E3 ,
input A0 ,
input A1 ,
input A2 ,
output wire Y0_n ,
output wire Y1_n ,
output wire Y2_n ,
output wire Y3_n ,
output wire Y4_n ,
output wire Y5_n ,
output wire Y6_n ,
output wire Y7_n
);
assign Y0_n = (~E3||E2_n||E1_n)?1:~(~A2&&~A1&&~A0);
assign Y1_n = (~E3||E2_n||E1_n)?1:~(~A2&&~A1&&A0);
assign Y2_n = (~E3||E2_n||E1_n)?1:~(~A2&&A1&&~A0);
assign Y3_n = (~E3||E2_n||E1_n)?1:~(~A2&&A1&&A0);
assign Y4_n = (~E3||E2_n||E1_n)?1:~(A2&&~A1&&~A0);
assign Y5_n = (~E3||E2_n||E1_n)?1:~(A2&&~A1&&A0);
assign Y6_n = (~E3||E2_n||E1_n)?1:~(A2&&A1&&~A0);
assign Y7_n = (~E3||E2_n||E1_n)?1:~(A2&&A1&&A0);
endmodule
和VL17类似。注意高低位。
`timescale 1ns/1ns
module decoder_38(
input E1_n ,
input E2_n ,
input E3 ,
input A0 ,
input A1 ,
input A2 ,
output wire Y0_n ,
output wire Y1_n ,
output wire Y2_n ,
output wire Y3_n ,
output wire Y4_n ,
output wire Y5_n ,
output wire Y6_n ,
output wire Y7_n
);
wire E ;
assign E = E3 & ~E2_n & ~E1_n;
assign Y0_n = ~(E & ~A2 & ~A1 & ~A0);
assign Y1_n = ~(E & ~A2 & ~A1 & A0);
assign Y2_n = ~(E & ~A2 & A1 & ~A0);
assign Y3_n = ~(E & ~A2 & A1 & A0);
assign Y4_n = ~(E & A2 & ~A1 & ~A0);
assign Y5_n = ~(E & A2 & ~A1 & A0);
assign Y6_n = ~(E & A2 & A1 & ~A0);
assign Y7_n = ~(E & A2 & A1 & A0);
endmodule
module decoder0(
input A ,
input B ,
input C ,
output wire L
);
wire Y0_n,Y1_n,Y2_n,Y3_n,Y4_n,Y5_n,Y6_n,Y7_n;
decoder_38 u0(
.E1_n(0),
.E2_n(0),
.E3(1),
.A0(C),
.A1(B),
.A2(A),
.Y0_n(Y0_n),
.Y1_n(Y1_n),
.Y2_n(Y2_n),
.Y3_n(Y3_n),
.Y4_n(Y4_n),
.Y5_n(Y5_n),
.Y6_n(Y6_n),
.Y7_n(Y7_n)
);
assign L = (~Y3_n||~Y1_n)||(~Y6_n||~Y7_n);
endmodule
这题可以画一个卡诺图。

用AB做数据选择,C的各种逻辑为要选择的数据。
同样注意高低位。
`timescale 1ns/1ns
module data_sel(
input S0 ,
input S1 ,
input D0 ,
input D1 ,
input D2 ,
input D3 ,
output wire Y
);
assign Y = ~S1 & (~S0&D0 | S0&D1) | S1&(~S0&D2 | S0&D3);
endmodule
module sel_exp(
input A ,
input B ,
input C ,
output wire L
);
wire S0,S1,D0,D1,D2,D3;
data_sel u0(
.S0(B) ,
.S1(A) ,
.D0(0) ,
.D1(C) ,
.D2(~C) ,
.D3(1) ,
.Y(L)
);
endmodule
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析: 在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1: print(k)k=k/2A.1000 B.10C.11D.9解析: 按照题意每次循环K/2,直到K值小于等
给定一个数组a,什么是实现其组合直到第n的最佳方法?例如:a=%i[abc]n=2#Expected=>[[],[:a],[:b],[:c],[:a,b],[:b,:c],[:c,:a]] 最佳答案 做如下:a=%w[abc]n=30.upto(n).flat_map{|i|a.combination(i).to_a}#=>[[],["a"],["b"],["c"],["a","b"],#["a","c"],["b","c"],["a","b","c"]] 关于ruby-最多n的组合,我
我想合并多个事件记录关系例如,apple_companies=Company.where("namelike?","%apple%")banana_companies=Company.where("namelike?","%banana%")我想结合这两个关系。不是合并,合并是apple_companies.merge(banana_companies)=>Company.where("namelike?andnamelike?","%apple%","%banana%")我要Company.where("名字像?还是名字像?","%apple%","%banana%")之后,我会写代
我有一个熟悉的问题,看起来像是数学世界的排列/组合。如何通过ruby实现以下目标?badges="1-2-3"badge_cascade=[]badges.split("-").eachdo|b|badge_cascade["1","2","3"]ButIwantittobeis:=>["1","2","3","1-2","2-3","3-1","2-1","3-2","1-3","1-2-3","2-3-1","3-1-2"] 最佳答案 函数式方法:bs="1-2-3".split("-")strings=1.upto(bs.
在尝试解决“网格上的路径”问题时,我编写了代码defpaths(n,k)p=(1..n+k).to_ap.combination(n).to_a.sizeend代码工作正常,例如ifn==8andk==2代码返回45,这是正确的路径数。但是,当使用较大的数字时,代码非常慢,我正在努力想出如何加快这个过程。 最佳答案 与其构建组合数组只是为了计算它,不如编写function定义组合的数量。我敢肯定还有包含此功能和许多其他组合函数的gem。请注意,我使用的是gemDistribution对于Math.factorial方法,但这是另一种
对于一个电子商务应用程序,我试图将选项的散列(每个选项都有一系列选择)转换为代表这些选择组合的散列数组。例如:#Input:{:color=>["blue","grey"],:size=>["s","m","l"]}#Output:[{:color=>"blue",:size=>"s"},{:color=>"blue",:size=>"m"},{:color=>"blue",:size=>"m"},{:color=>"grey",:size=>"s"},{:color=>"grey",:size=>"m"},{:color=>"grey",:size=>"m"}]Input内部可能有额
文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分
我有一个PORO(普通旧Ruby对象)来处理一些业务逻辑。它接收一个ActiveRecord对象并对其进行分类。为了简单起见,以下面为例:classClassificatorSTATES={1=>"Positive",2=>"Neutral",3=>"Negative"}definitializer(item)@item=itemenddefnameSTATES.fetch(state_id)endprivatedefstate_idreturn1if@item.value>0return2if@item.value==0return3if@item.value但是,我还想根据这些st
我大胆猜测将一个数组拼成另一个数组比将两个数组加在一起更快,但经过快速基准测试后我发现我错了。我假设解释器只会将splat转换为数组文字,而不必每次都对其调用+方法。那么,为什么+比splat更快?我使用了这个基准代码:deftest(trials=1000)head=[1,2,3]tail=100.times.to_at=Time.now.to_ftrials.timesdo|i|a=[head,*tail]endputs"splatdonein#{Time.now.to_f-t}"t=Time.now.to_ftrials.timesdo|i|a=head+tailendputs"