金刚 - 舰队collection

[技术讨论] 【原创】自己设计的一个简易CPU(新手刚起步),顺带介绍下CPU

1#
发表于 2015-2-28 12:33:40 | 查看: 15636| 回复: 36
本帖最后由 kami1217 于 2015-3-1 18:33 编辑

这帖子全手打的,肯定有错!


下图是某大学的地上用碎石铺的一个晶体管符号,作为这个帖子的开始。



CPU大家都知道就是个极其复杂的IC,里面有超多超多的transistors(晶体管,不知道有没有人玩过一个游戏也叫晶体管,挺有意思的),拿我的i7-3930k(几年的古董了) 来说吧,它就有22.7亿个晶体管。晶体管吧,常用的有两种,一种BJT(bipolar junction transistor),这个base电流不为0所以会浪费能源。另一种叫MOSFET(俗称mos),这个好,gate电流为0,所以目前市场90%以上的transistor都是用mos。

下面就是一个NPN(BJT),做个speaker的amplifier还行,但绝对不会出现在CPU里面,即便base电流很小,如果乘以个1亿,P=VI是谁说的呢?
=>=>

MOSFET一般分两种,一种Nmos,一种Pmos。把元素周期表拿出来,硅前面那一串元素做的就是p-type(需要一个电子才成为半导体,一般用Boron硼,果然是B都有hole吗?),反之后面那一串做的就是n-type(丢一个电子成为半导体,一般用phosphorus磷,P长得就像手枪)。

当我们稍稍给它两一点压力(potential difference),N就开始激动了,想把一个神奇的物体射到P的小穴里面,不射会非常不爽,我们称这个现象叫做x where x = pn-junction or 爱。根据不同的材料制造的这种动作可能会有不同的效果,比如把电压控制到0.7的普通diode,or由于剧烈到触发强大高能,估计是太爽了,结果造出了可以发光的小孩叫photon, diode也升级成为-LED(light emitting diode)。哦,对了,还记得爱因斯坦的光电效应么,同理。另外,几个日本大叔发现了Blue LEDs (InGaN LEDs),因此获得了2014诺贝额物理学奖,因为该发现可以将制造白光所需的能源减少最多至90%。日本大叔就是厉害啊,真正改变了世界。


回到CPU
当一个PMOS和一个NMOS组成一起的时候就会形成一个CMOS,那这个CMOS用来干啥呢? 答案是用来当开关的,N开,P就关;P开,N就关。
CMOS切面图——
对,CPU用的就它了,虽然非常小,而且很多层,但用显微镜看就是这个样子滴。
比如这个:
就是常见的AND-gate,两个NMOS串联,两个PMOS并联,所以output是1的情况为:A和B都得是1。


好了,我们为什么要CPU呢?
因为我们需要它来做很多简单重复的逻辑工作。

为什么要集成上亿的晶体管在里面呢?
因为我们需要更好的performance,晶体管越多,可实现的逻辑门越多,可用的function/clock就能越复杂。

为什么大家喜欢超频呢?
因为当你不能改变CPU结构的情况下,你只能增加频率来提升速度(T=1/f),同样1分钟,你可以跑更多的clock cycle。

为什么台积电,inte天天在炫耀他们工艺技术多先进? 又是几纳米了,又是合格率了...
其实就是把gate-Length变小,这样W/L ratio就会变大,增加performance。

附两个公式一个图:
线性区:
饱和区:


scaling的好处是什么呢?
一个wafer就那么大,die越小,变相缩小成本;如果die不变,变相提升performance因为可集成的transistor又多了;还有一个好处就是节约能源了,原因有点复杂还是和W/L有关。


可以一直变小么?
难,相当难,所以多核心出现了!即便如此,摩尔定律的slope也趋缓了,有垂死挣扎的感觉。


开始正题吧在之前给大家看看CPU是什么做的:

对,你没看错,就是含高硅的黄沙做的,所以几千几千的CPU的主材料就是这个玩意儿。
然后加工提纯后,变成这个,感觉有点像那个啥。


不说了,打字太累...直接上图:
这个是初步的设计图,没想太多,主要是抛砖引玉,以后可以加更多的block

这个CPU是16bits的,所有bus均为16bits,一共8个储存register(注册器),两个临时注册器,一个指令注册器,一个multiplexer(选择器),一个主控说白了就是个FSM(有限状态机), 之后加了一个counter,数指令clock的,比如movi为一个clock。
Specification(直接从我的报告复制的)
• Register – This system has three inputs, two 1-bit signals, Clock and Enable, and one 16-bit signal, D. Also, this system has one 16-bit output signal, Q.
• Instruction Register – This system has three inputs, two 1-bit signals, Clock and Enable, and one 16-bit signal, Din. Also, this system has one 9-bit output signal, cmd.
• Multiplexer – This system has eleven input signals, one 4-bit Sel signal and ten 16-bit signals, Reg0, Reg1, Reg2, Reg3, Reg4, Reg5, Reg6, Reg7, Din, and AddSub. This system also has one 16-bit output signal, Bus.
• Adder/Subtracter – This system has three input signals, one 1-bit signal Sign, and two 16-bit signals, Rx and Ry. This system has one 16-bit output signal, Output.
• Control Unit – This system has four input signals, three 1-bit signals, Run, Reset, and Clock, and one 9-bit signal IRin. Also, this system has thirteen output signals, one 4-bit Mux signal, and twelve 1-bit signals,  Reg0, Reg1, Reg2, Reg3, Reg4, Reg5, Reg6, Reg7, RegA, Done, IRen, and AddSub.
• CPU – This system has four input signals, three 1-bit signals, Run, Reset, and Clock, and one 16-bit signal, Din. Also, this system has four output signals, one 1-bit signal, Done, and three 16-bit signals, BusO, R0out, and R1out.
对了还有8个七划灯(seven-segment-display,就是你电梯上看到的那个数楼层的),作为每个register的显示,貌似忘写了。

模拟测试:
储存注册器——

指令注册器——
对了这个忘说了,指令为9位,IIIXXXYYY, III为指令代号,XXX为Rx的代号,YYY为Ry的代号。
目前的指令就四个,mov;movi,add,sub。代号分别为001,010,011,100.由于代号为三位,所以opcode最多也就8个,加上000特殊,所以就7个。
给大家出个quiz吧:大家知道MIPS的opcode为多少位么?x86的呢?

选择器——

加法减法识别——

mv/mvi——

add/sub——

一切没问题之后就可以整理组合了。用的是Quartus II 11做的图,DE2的板作为测试。
图1:


图2:

这是最终测试结果,貌似还好...


最后把vhdl的code贴上来,感觉可能有点长,哎~
Reg_16.vhd
  1. Library ieee;
  2. Use ieee.std_logic_1164.all;
  3. Entity Reg16 is
  4. Port(
  5. Clock : in std_logic;
  6. Enable : in std_logic := '1';
  7. D : in std_logic_vector(15 downto 0) := "0000010000000000";
  8. Q : out std_logic_vector(15 downto 0) := "0000000000000000"
  9. );
  10. End Reg16;
  11. Architecture struct of Reg16 is
  12. Begin
  13. Process (Clock)
  14. Begin
  15. if(rising_edge(Clock) and Enable = '1') then
  16. Q <= D;
  17. end if;
  18. End Process;
  19. End struct;
复制代码

IReg.vhd
  1. Library ieee;
  2. Use ieee.std_logic_1164.all;
  3. Entity IReg is
  4.     Port(
  5.         Clock  : in std_logic;
  6.         Enable : in std_logic := '1';
  7.         Din      : in std_logic_vector(15 downto 0) := "0000000000000000";
  8.         cmd      : out std_logic_vector(8 downto 0) := "000000000"
  9.     );
  10. End IReg;
  11. Architecture struct of IReg is
  12.     Begin
  13.         Process (Clock, Enable, Din)
  14.             Begin
  15.                 if(rising_edge(Clock) and Enable = '1') then
  16.                     cmd <= Din(15 downto 7);
  17.                 end if;
  18.         End Process;
  19. End struct;
复制代码

Multiplexer.vhd
  1. Library ieee;
  2. Use ieee.std_logic_1164.all;
  3. Entity Multiplexer is
  4.     Port(
  5.         Sel    : in std_logic_vector(3 downto 0);
  6.         Reg0   : in std_logic_vector(15 downto 0);
  7.         Reg1   : in std_logic_vector(15 downto 0);
  8.         Reg2   : in std_logic_vector(15 downto 0);
  9.         Reg3   : in std_logic_vector(15 downto 0);
  10.         Reg4   : in std_logic_vector(15 downto 0);
  11.         Reg5   : in std_logic_vector(15 downto 0);
  12.         Reg6   : in std_logic_vector(15 downto 0);
  13.         Reg7   : in std_logic_vector(15 downto 0);
  14.         Din    : in std_logic_vector(15 downto 0);
  15.         AddSub : in std_logic_vector(15 downto 0);
  16.         BusO   : out std_logic_vector(15 downto 0)
  17.     );
  18. End Multiplexer;
  19. Architecture struct of Multiplexer is
  20.     Begin
  21.         Process (Sel, Reg0, Reg1, Reg2, Reg3, Reg4, Reg5, Reg6, Reg7, Din, AddSub)
  22.             Begin
  23.                 if(Sel = "0000") then
  24.                     BusO <= Reg0;
  25.                 elsif(Sel = "0001") then
  26.                     BusO <= Reg1;
  27.                 elsif(Sel = "0010") then
  28.                     BusO <= Reg2;
  29.                 elsif(Sel = "0011") then
  30.                     BusO <= Reg3;
  31.                 elsif(Sel = "0100") then
  32.                     BusO <= Reg4;
  33.                 elsif(Sel = "0101") then
  34.                     BusO <= Reg5;
  35.                 elsif(Sel = "0110") then
  36.                     BusO <= Reg6;
  37.                 elsif(Sel = "0111") then
  38.                     BusO <= Reg7;           
  39.                 elsif(Sel = "1000") then
  40.                     BusO <= Din;
  41.                 elsif(Sel = "1001") then
  42.                     BusO <= AddSub;
  43.                 end if;
  44.         End Process;
  45. End struct;
复制代码

Adder.vhd
  1. Library ieee;
  2. Use ieee.std_logic_1164.all;
  3. Use ieee.numeric_std.all;
  4. Entity Adder is
  5.     Port(
  6.         sign   : in std_logic := '0';
  7.         Rx     : in std_logic_vector(15 downto 0) := "0000000000000000";
  8.         Ry     : in std_logic_vector(15 downto 0) := "0000000000000000";
  9.         Output : out std_logic_vector(15 downto 0)  := "0000000000000000"
  10.     );
  11. End Adder;
  12. Architecture struct of Adder is
  13.     Begin
  14.         Process (sign, Rx, Ry)
  15.             Begin
  16.                 if(sign = '0') then
  17.                     Output <= std_logic_vector(unsigned(Rx) + unsigned(Ry));
  18.                 else
  19.                     Output <= std_logic_vector(unsigned(Rx) - unsigned(Ry));
  20.                 end if;
  21.         End Process;
  22. End struct;
复制代码

Control_Unit.vhd (这个应该算是最关键的一个)
  1. Library ieee;
  2. Use ieee.std_logic_1164.all;
  3. Use ieee.numeric_std.all;
  4. Entity Control_Unit is
  5.   Port (
  6.     Run  : in std_logic := '1';
  7.     Reset: in std_logic := '0';
  8.     Clock: in std_logic;
  9.     IRin : in std_logic_vector(8 downto 0) := "000000000";
  10.     Done : out std_logic := '0';
  11.     Clear: out std_logic := '0';
  12.     IRen : out std_logic := '1';
  13.     Mux  : out std_logic_vector(3 downto 0) := "0000";
  14.     Reg0 : out std_logic := '0';
  15.     Reg1 : out std_logic := '0';
  16.     Reg2 : out std_logic := '0';
  17.     Reg3 : out std_logic := '0';
  18.     Reg4 : out std_logic := '0';
  19.     Reg5 : out std_logic := '0';
  20.     Reg6 : out std_logic := '0';
  21.     Reg7 : out std_logic := '0';
  22.     RegA : out std_logic := '0';
  23.     RegG : out std_logic := '0';
  24.     AddSub: out std_logic := '0'
  25.   );
  26. End Control_Unit;
  27. Architecture struct of Control_Unit is
  28.     Type    state_type is (decode, mv, add1, add2);
  29.     Signal  currS    : state_type;
  30.     Signal  nextS    : state_type;
  31.     Signal  toog     : std_logic := '0';
  32.     Begin
  33.         Process (Clock, Reset)
  34.             Begin
  35.                 if(Reset = '1') then
  36.                    currS <= decode;
  37.                 elsif(rising_edge(Clock)) then
  38.                     currS <= nextS;
  39.                     toog <= not toog;
  40.                 end if;
  41.         End Process;
  42.         -- mv has one next state, so it has two clock cycles;
  43.         -- mvi has no next state, so it has one clock cycle;
  44.         -- add or sub has two next state, so it has three clock cycles;
  45.         Process (toog)
  46.             Begin
  47.                 if(Clock = '1') then
  48.                     Case currS is
  49.                         when decode =>
  50.                             Reg0 <= '0';
  51.                             Reg1 <= '0';
  52.                             Reg2 <= '0';
  53.                             Reg3 <= '0';
  54.                             Reg4 <= '0';
  55.                             Reg5 <= '0';
  56.                             Reg6 <= '0';
  57.                             Reg7 <= '0';
  58.                             if(IRin(8 downto 6) = "001") then -- mv Rx, Ry
  59.                                 Mux <= "0" & IRin(2 downto 0); -- Ry
  60.                                 Case IRin(5 downto 3) is
  61.                                     when "000" => Reg0 <= '1';
  62.                                     when "001" => Reg1 <= '1';
  63.                                     when "010" => Reg2 <= '1';
  64.                                     when "011" => Reg3 <= '1';
  65.                                     when "100" => Reg4 <= '1';
  66.                                     when "101" => Reg5 <= '1';
  67.                                     when "110" => Reg6 <= '1';
  68.                                     when "111" => Reg7 <= '1';
  69.                                     when others => null;
  70.                                 End Case;
  71.                                 nextS <= mv;
  72.                                 Done <= '0';
  73.                                 Clear <= '0'; -- Keep counting
  74.                                 IRen <= '0'; -- Hold the current command
  75.                             elsif(IRin(8 downto 6) = "010") then -- mvi Rx, #D
  76.                                 Mux <= "1000"; -- Din
  77.                                 Case IRin(5 downto 3) is
  78.                                     when "000" => Reg0 <= '1';
  79.                                     when "001" => Reg1 <= '1';
  80.                                     when "010" => Reg2 <= '1';
  81.                                     when "011" => Reg3 <= '1';
  82.                                     when "100" => Reg4 <= '1';
  83.                                     when "101" => Reg5 <= '1';
  84.                                     when "110" => Reg6 <= '1';
  85.                                     when "111" => Reg7 <= '1';
  86.                                     when others => null;
  87.                                 End Case;
  88.                                 nextS <= mv;
  89.                                 Done <= '0';
  90.                                 Clear <= '0'; -- Keep counting
  91.                                 IRen <= '0'; -- Hold the current command
  92.                             elsif(IRin(8 downto 6) = "011" or IRin(8 downto 6)="100") then -- add or sub Rx, Ry
  93.                                 Mux <= "0" & IRin(5 downto 3); -- Rx
  94.                                 RegA <= '1'; -- Store Rx in A on next cycle
  95.                                 RegG <= '1';
  96.                                 nextS <= add1;
  97.                                 Done <= '0';
  98.                                 Clear <= '0'; -- Keep counting
  99.                                 IRen <= '0'; -- Hold the current command
  100.                             end if;
  101.                         when mv =>
  102.                             nextS <= decode;
  103.                             Reg0 <= '0';
  104.                             Reg1 <= '0';
  105.                             Reg2 <= '0';
  106.                             Reg3 <= '0';
  107.                             Reg4 <= '0';
  108.                             Reg5 <= '0';
  109.                             Reg6 <= '0';
  110.                             Reg7 <= '0';
  111.                             IRen <= '1'; -- Get new Command next clock cyle
  112.                             Done <= '1';
  113.                             Clear <= '1'; -- Clear the Counter                           
  114.                         when add1 =>
  115.                             RegA <= '0';                    -- Disable A from writing
  116.                             Mux <= "0" & IRin(2 downto 0);   -- Put Ry on the bus next cycle
  117.                             AddSub <= IRin(8); -- Determin add or sub
  118.                             nextS <= add2;
  119.                         when add2 =>
  120.                             Case IRin(5 downto 3) is
  121.                                 when "000" => Reg0 <= '1';
  122.                                 when "001" => Reg1 <= '1';
  123.                                 when "010" => Reg2 <= '1';
  124.                                 when "011" => Reg3 <= '1';
  125.                                 when "100" => Reg4 <= '1';
  126.                                 when "101" => Reg5 <= '1';
  127.                                 when "110" => Reg6 <= '1';
  128.                                 when "111" => Reg7 <= '1';
  129.                                 when others => null;
  130.                             End Case;
  131.                             RegG <= '0';
  132.                             Mux <= "1001"; -- Put Result from Adder on the BUS
  133.                             nextS <= decode; -- Reset all reg
  134.                             Clear <= '1'; -- Clear the Counter
  135.                             Done <= '1';
  136.                             IRen <= '1';
  137.                         when others => null;
  138.                     End Case;
  139.                 end if;
  140.         End Process;
  141. End struct;
复制代码

dec_7seg.vhd
  1. LIBRARY IEEE;
  2. USE IEEE.STD_LOGIC_1164.all;
  3. USE IEEE.STD_LOGIC_ARITH.all;
  4. USE IEEE.STD_LOGIC_UNSIGNED.all;
  5. -- Hexadecimal to 7 Segment Decoder for LED Display

  6. ENTITY dec_7seg IS
  7. PORT( hex_digit_16 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
  8. segment_a, segment_b, segment_c, segment_d, segment_e, segment_f,
  9. segment_g : OUT std_logic);
  10. END dec_7seg;
  11. ARCHITECTURE a OF dec_7seg IS
  12. SIGNAL segment_data : STD_LOGIC_VECTOR(6 DOWNTO 0);
  13. SIGNAL hex_digit_4 : STD_LOGIC_VECTOR(3 DOWNTO 0);
  14. BEGIN
  15. PROCESS (Hex_digit_16, Hex_digit_4)
  16. -- HEX to 7 Segment Decoder for LED Display
  17. BEGIN -- Hex-digit is the four bit binary value to display in hexadecimal
  18. Hex_digit_4 <= Hex_digit_16(3 DOWNTO 0);
  19. CASE Hex_digit_4 IS
  20. WHEN x"0" =>
  21. segment_data <= "1111110";
  22. WHEN x"1" =>
  23. segment_data <= "0110000";
  24. WHEN x"2" =>
  25. segment_data <= "1101101";
  26. WHEN x"3" =>
  27. segment_data <= "1111001";
  28. WHEN x"4" =>
  29. segment_data <= "0110011";
  30. WHEN x"5" =>
  31. segment_data <= "1011011";
  32. WHEN x"6" =>
  33. segment_data <= "1011111";
  34. WHEN x"7" =>
  35. segment_data <= "1110000";
  36. WHEN x"8" =>
  37. segment_data <= "1111111";
  38. WHEN x"9" =>
  39. segment_data <= "1111011";
  40. WHEN x"A" =>
  41. segment_data <= "1110111";
  42. WHEN x"B" =>
  43. segment_data <= "0011111";
  44. WHEN x"C" =>
  45. segment_data <= "1001110";
  46. WHEN x"D" =>
  47. segment_data <= "0111101";
  48. WHEN x"E" =>
  49. segment_data <= "1001111";
  50. WHEN x"F" =>
  51. segment_data <= "1000111";
  52. WHEN OTHERS =>
  53. segment_data <= "0111110"; -- if u get something alse, this is going to show "U"
  54. END CASE;
  55. END PROCESS;
  56. -- extract segment data bits and invert
  57. -- LED driver circuit is inverted
  58. segment_a <= NOT segment_data(6);
  59. segment_b <= NOT segment_data(5);
  60. segment_c <= NOT segment_data(4);
  61. segment_d <= NOT segment_data(3);
  62. segment_e <= NOT segment_data(2);
  63. segment_f <= NOT segment_data(1);
  64. segment_g <= NOT segment_data(0);
  65. END a;
复制代码

最后一个,总体测试
Test_CPU.vhd
  1. Library ieee;
  2. Use ieee.std_logic_1164.all;
  3. Entity Test_CPU is
  4. End Test_CPU;
  5. Architecture struct of Test_CPU is
  6.   Component CPU is
  7.     Port(
  8.       Run    : in std_logic := '1';
  9.         Reset  : in std_logic := '1';
  10.         Clock  : in std_logic;
  11.         Din    : in std_logic_vector(15 downto 0);
  12.         BusO   : out std_logic_vector(15 downto 0);
  13.         Done   : out std_logic;
  14.         R0out  : out std_logic_vector(15 downto 0);
  15.         R1out  : out std_logic_vector(15 downto 0)
  16.     );  
  17.   End Component;
  18.   
  19.   Signal  Clk : std_logic := '0';
  20.   Signal  Din : std_logic_vector(15 downto 0);
  21.   Signal  MSB : std_logic_vector(15 downto 0);
  22.   Signal  Done: std_logic;
  23.   Signal  r0o : std_logic_vector(15 downto 0);
  24.   Signal  r1o : std_logic_vector(15 downto 0);
  25.   
  26.   Begin
  27.     Sys: CPU Port Map(
  28.       Run => '1',
  29.       Reset => '1',
  30.       Clock => Clk,
  31.       Din => Din,
  32.       BusO => MSB,
  33.       Done => Done,
  34.       R0out => r0o,
  35.       R1out => r1o
  36.     );
  37.    
  38.     Process
  39.       Begin
  40.     wait for 50 ns;
  41.     Din <= "0100000000000000"; -- movi R0, 128
  42.     wait for 5 ns;
  43.     Clk <= not Clk; -- High
  44.    
  45.     wait for 5 ns;
  46.     Clk <= not Clk; --Low
  47.    
  48.     wait for 50 ns;
  49.     Din <= "0000000010000000"; -- 128
  50.     wait for 5 ns;
  51.     Clk <= not Clk; -- High
  52.    
  53.     wait for 5 ns;
  54.     Clk <= not Clk; --Low
  55.    
  56.     wait for 50 ns;
  57.     Din <= "0010010000000000"; -- mov R1 , R0
  58.     wait for 5 ns;
  59.    
  60.     wait for 5 ns;
  61.     Clk <= not Clk; --Low
  62.     wait for 5 ns;
  63.     Clk <= not Clk; --High
  64.     wait for 5 ns;
  65.     Clk <= not Clk; --Low
  66.    
  67.     wait for 50 ns;
  68.     Din <= "0110000010000000"; -- add R0 , R1
  69.     wait for 5 ns;
  70.     Clk <= not Clk; --High
  71.    
  72.     wait for 5 ns;
  73.     Clk <= not Clk; --Low
  74.     wait for 5 ns;
  75.     Clk <= not Clk; --High
  76.     wait for 5 ns;
  77.     Clk <= not Clk; --Low
  78.     wait for 5 ns;
  79.     Clk <= not Clk; --High
  80.     wait for 5 ns;
  81.     Clk <= not Clk; --Low
  82.    
  83.     wait for 50 ns;
  84.     Din <= "0110000010000000"; -- add R0 , R1
  85.     wait for 5 ns;
  86.     Clk <= not Clk; --High
  87.         
  88.     wait for 5 ns;
  89.     Clk <= not Clk; --Low
  90.     wait for 5 ns;
  91.     Clk <= not Clk; --High
  92.     wait for 5 ns;
  93.     Clk <= not Clk; --Low
  94.     wait for 5 ns;
  95.     Clk <= not Clk; --High
  96.     wait for 5 ns;
  97.     Clk <= not Clk; --Low
  98.    
  99.     wait for 50 ns;
  100.     Din <= "1000000010000000"; -- sub R0 , R1
  101.     wait for 5 ns;
  102.     Clk <= not Clk; -- High
  103.    
  104.     wait for 5 ns;
  105.     Clk <= not Clk; --Low
  106.     wait for 5 ns;
  107.     Clk <= not Clk; --High
  108.     wait for 5 ns;
  109.     Clk <= not Clk; --Low
  110.     wait for 5 ns;
  111.     Clk <= not Clk; --High
  112.     wait for 5 ns;
  113.     Clk <= not Clk; --Low
  114.   End Process;
  115. End struct;
复制代码


既然讲到了几位日本大叔,那就得把图补上来,就是那三位,相当NB。


还有改变世界的蓝光LED。















4
回复

使用道具 举报

11
雪初音2015 - Vocaloid库特 - Little Busters - 库特(万圣)original(3) - 绘师: 和錆魔法店員おるる☆スタッフ - MUGEN 中野TRF沙耶 - 绘师: 和錆大鲸 - 2015圣诞节 - 舰队collection沙沙宫纱夜 - 学战都市Asterisk西园寺兔 - 对魔导学园35试验小队original(16) - 绘师: nyanya吽 - Show By Rock!!夜刀神十香 - 约会大作战
2#
发表于 2015-2-28 12:46:59
貌似很厉害的样子 坐等大神出现
好像刚来的日子一样 安静的月光 冰冻的风 好黑 好冷 好饿
回复

使用道具 举报

金刚 - 舰队collection
3#
发表于 2015-2-28 12:50:58
其实可以好好规范下帖子,关键是不想写字了,全是一个一个打上去的。
回复

使用道具 举报

THF灵乌路 空 - 用于纪念论坛的前身 THF东方幻梦想的特殊勋章1周年纪念勋章 - 论坛1岁纪念勋章次元守护者 - 对小镇做出巨大贡献的小伙伴才可以拥有的勋章(medal of supporter)
4#
发表于 2015-2-28 13:06:23
先不管是無原創,
排版還不錯~
番長(问君能有几多愁?恰似一部新番没看头。)
回复

使用道具 举报

金刚 - 舰队collection
5#
发表于 2015-2-28 13:13:12
流光夜雫 发表于 2015-2-28 13:06
先不管是無原創,
排版還不錯~

绝对原创,专业就是计算机工程师
回复

使用道具 举报

THF灵乌路 空 - 用于纪念论坛的前身 THF东方幻梦想的特殊勋章1周年纪念勋章 - 论坛1岁纪念勋章次元守护者 - 对小镇做出巨大贡献的小伙伴才可以拥有的勋章(medal of supporter)
6#
发表于 2015-2-28 13:14:44
kami1217 发表于 2015-2-28 13:13
绝对原创,专业就是计算机工程师

很感謝分享~
番長(问君能有几多愁?恰似一部新番没看头。)
回复

使用道具 举报

栗山未来 - 境界线的彼方大妖精 - 大妖精雪初音 - Vocaloid柏崎星奈 - 柏崎星奈original(2) - 绘师: 和錆
7#
发表于 2015-2-28 13:31:57
吓得我都躺椅子上了

坛娘偷偷的在喵嗷喵嗷~~的口袋里放入了 13 枚 星币

回复

使用道具 举报

8#
发表于 2015-2-28 15:10:27
woc太厉害!!!!
回复

使用道具 举报

1周年纪念勋章 - 论坛1岁纪念勋章由亚 - 由亚(yourdiary)芙兰朵露 - 芙兰朵露kurumi - 画师原创 By kantoku库特 - Little Busters - 库特(万圣)库特 - Little Busters - 库特(Wafter)狂气の红眼 - Reisen10周年纪念勋章 - 梦次元10周年纪念勋章
9#
发表于 2015-2-28 16:00:02
工程师就是厉害
菜鸟看了半天,还是没理明白思路,好难理解的感觉,我的逻辑思维已成仙。
回复

使用道具 举报

10#
发表于 2015-2-28 17:55:55
給個現貨咯
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则