Silicon Zeroes

Silicon Zeroes

Not enough ratings
过关攻略
By Blacktion
大部分是最优解,一部分想不出来TAT,这玩意太难了,欢迎大家来补充!!
   
Award
Favorite
Favorited
Unfavorite
Beginnings
Beginnings

嗯哼,第一章当然都是完美通关。
COW贼尼玛费劲(雾)

WIRING


MULTIWIRING


PLACING


CONFIG


MODULES


MEMORY


MEMSUM


TIME


LATCH


WRITER


STALL


REWRITE


SPARES


COUNTER


VALIDATION
对,这一关别被它蒙住了,他就是要最后一个点有问题。
点完了test等他提示有问题再点一下那个播放键的三角形就行了。 简直有毒


INCREMENT


最后是COW
THE CPU
THE CPU

update:已经可以完美通关

PALETTE

ALTERNATOR

THREES

DEREF

ZEROES

INSTRUCTIONS

MULTIPLEX

SET MEMORY

ONES

FASTCOUNT

FLIP

DRAGGING

REGFILE

BASIC CPU

OP SELECT

ARITH CPU
一定要注意连接的结点。

MULTIPLY
按照Dorence Deng大大提供的解决方案进行的连接。
Thanks for the solution by Dorence Deng.
Solution for Multiply
@author: Dorence Deng
HIGH SPEED
HIGH SPEED
绞尽脑汁玩了一遍,大部分都是最优解,但还是有两个不能达到最优,就是BACK和DELAY CPU,求大神指点。

OH NO

DELAY

QUADRUPLE

MAZE

CLOCK

DELAY LATCH

BACK
非最优解

DELAY ZERO

SLOWSTALL

COMBINER

SWAP

COPIER

SPLICOUNT

PRODUCTS
注意连接,蓝色相连

FAST TWO

DELAY CPU
非最优解
ASIDES........玩不动了
玩不动了,回来再更
5 Comments
Dorence Apr 21, 2020 @ 12:48am 
HIGH SPEED - DELAY CPU 最优解
DELAY CPU
Blacktion  [author] Jan 3, 2020 @ 6:42am 
@Dorence 我按照你的verilog代码连了一下,好像是你照着你写的Multiply写verilog的时候写错了,会有小bug,a个b相加的时候会多加一次,而且会有一次相反(a个b相加会变成a-1个b+1个a),然后我稍微改了一下。
这个是完全按照你的连的
演示
这个是我稍微改了一下的,就当给你提了个pr,hhhhh。
演示
Dorence Dec 20, 2019 @ 6:44pm 
[h1]THE CPU - Multiply[/h1]
Part 3/3 (一次只能1000字)

// Modules definition
module Adder(output Sum, input Augend, Addend); endmodule
module Equals(output Output, input Base, Comparator, ...); endmodule
module Input_Selector(output Output, input Input_Select, Input_0, ...); endmodule
module Latch(output Store, input To_Store); endmodule
module Number(output Value, input Const_Number); endmodule
module Reader(output Mem_Value, input Mem_Slot); endmodule
module Writer(input Mem_Slot, To_Write); endmodule
Dorence Dec 20, 2019 @ 6:43pm 
[h1]THE CPU - Multiply[/h1]
Part 2/3 (一次只能1000字)

Equals e_c(p_eq, p_data_b, p_n); // Equals 1 -> port #eq : if n == b

Latch l_eq(p_rst, p_eq), // Latch 2 -> port #rst : reset n = 1, s = a after eq signal
l_n(p_n, p_next_n), // Latch 3 -> port #n : n times repeated
l_s(p_s, p_next_s); // Latch 4 -> port #s : s = a * (n - 1)

Adder a_addr_n(p_n_1, p_n, p_1), // Adder 3 -> port #n_1 : n + 1
a_addr_s(p_s_1, p_s, p_data_a); // Adder 4 -> port #s_1 : s + a, or a * n

Input_Selector sel_c(p_sel_c, p_eq, -, p_c), // I-Sel 1 -> port #sel_c
sel_n(p_next_n, p_rst, p_n_1, p_1), // I-Sel 2 -> port #next_n
sel_s(p_next_s, p_rst, p_s_1, p_data_b); // I-Sel 3 -> port #next_s

Writer w_c(p_sel_c, p_s_1); // Writer 1 : save data[c] = s_1 if n == b

endmodule
Dorence Dec 20, 2019 @ 6:43pm 
[h1]THE CPU - Multiply[/h1]
Part 1/3 (一次只能1000字)
17组件过(目标18) ,不能贴图,就用Verilog写了,四个Latch令人头秃...

// Solution for Multiply
// @author: Dorence Deng

module Solution();
wire p_1, p_a, p_b, p_c, p_next_addr, p_data_a, p_data_b, p_sel_c,
p_eq, p_rst, p_n, p_s, p_n_1, p_s_1, p_next_n, p_next_n; // wire p_x == port #x

Number num1(p_1, 1); // Number 1 -> port #1

// to calculate a * b = c, repeat adding a for b times
Latch l_a(p_a, p_next_addr); // Latch 1 -> port #a : address of a

Adder a_addr_b(p_b, p_a, p_1), // Adder 1 -> port #b : address of b
a_addr_c(p_c, p_b, p_1), // Adder 2 -> port #c : address of c
a_next_addr(p_next_addr, p_sel_c, p_1); // Adder 3 -> port #next_addr

Reader r_a(p_data_a, p_a), // Reader 1 -> port #data_a : value of a
r_b(p_data_b, p_b); // Reader 2 -> port #data_b : value of b