国产久操视频-国产久草视频-国产久热精品-国产久热香蕉在线观看-青青青青娱乐-青青青青在线成人视99

  • 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【手撕代碼】平頭哥面試,找出一組數(shù)中第一個(gè)1的位置或統(tǒng)計(jì)1的個(gè)數(shù)

2022/04/18
1573
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

在秋招中,很多求職者都遇到過(guò)關(guān)于找1的手撕代碼題,其中平頭哥面試就會(huì)讓面試者手撕這種類型的題,其中出題套路大多為從最高位/最低位開(kāi)始找到1個(gè)8bit/16bit數(shù)的第一個(gè)位置,統(tǒng)計(jì)8bit/16bit數(shù)中1的個(gè)數(shù)。

大家不妨先想想自己遇到這個(gè)問(wèn)題會(huì)怎么寫(xiě)這個(gè)代碼?下面小編給出幾種思路:

1、從最高位開(kāi)始找出一個(gè)8bit數(shù)的第一個(gè)1的位置(二分法)(1)設(shè)計(jì)代碼

module find_first1_h2L(input [7:0]x,output wire [2:0]y    );
wire [3:0]data_4;wire [1:0]data_2;
assign y[2]=|x[7:4];assign data_4=y[2]?x[7:4]:x[3:0];assign y[1]=|data_4[3:2];assign data_2=y[1]?data_4[3:2]:data_4[1:0];assign y[0]=data_2[1];  
endmodule

(2)仿真代碼

module find_first1_h2L_tst();reg [7:0]x;wire [2:0]y;
find_first1_h2L U_find_first1_h2L(.x(x),.y(y));
initial begin
x=8'b00101110;#20 x=8'b01100000;#20 x=8'b00000000;#20 x=8'b00000001;
end
endmodule

2、輸入[15:0]data_in中,從低位開(kāi)始找到第一個(gè)1出現(xiàn)的位置。

(1)設(shè)計(jì)代碼

module find_one(input clk,input rst_n,input [15:0]data_in,input data_in_valid,output reg[3:0]position    );wire [15:0]data_in_r;assign   data_in_r=~(data_in-1)&data_in;always@(posedge clk)if(!rst_n)  position<=0;else begincase(data_in_r)  16'b0000000000000001:position<=4'd0;  16'b0000000000000010:position<=4'd1;  16'b0000000000000100:position<=4'd2;  16'b0000000000001000:position<=4'd3;    16'b0000000000010000:position<=4'd4;  16'b0000000000100000:position<=4'd5;    16'b0000000001000000:position<=4'd6;  16'b0000000010000000:position<=4'd7;      16'b0000000100000000:position<=4'd8;  16'b0000001000000000:position<=4'd9;  16'b0000010000000000:position<=4'd10;  16'b0000100000000000:position<=4'd11;    16'b0001000000000000:position<=4'd12;  16'b0010000000000000:position<=4'd13;    16'b0100000000000000:position<=4'd14;  16'b1000000000000000:position<=4'd15;      default:position<=0;  endcase  end  endmodule

(2)仿真代碼

module find_one_tst();reg       clk     ;reg       rst_n   ;reg [15:0]data_in ;reg data_in_valid;wire[3:0] position;
find_one U_find_one(.clk       (clk     ),.rst_n     (rst_n   ),.data_in   (data_in ),.data_in_valid(data_in_valid),.position  (position));
initial beginclk=1;rst_n=0;data_in=0;data_in_valid=0;#20 rst_n=1;data_in=16'd12;data_in_valid=1;#40 data_in=16'd9;#20 data_in_valid=0;endalways #10 clk=~clk;endmodule

 

大家也可以用二分法試試!

3、統(tǒng)計(jì)輸入[7:0]data_in中1的個(gè)數(shù),要求優(yōu)化資源使用

(1)設(shè)計(jì)代碼

module find_number1(  input [7:0]data,  output [7:0]number    );
  parameter m1 = 8'b01010101;  parameter m2 = 8'b00110011;  parameter m3 = 8'b00001111;
  wire [7:0]data1;  wire [7:0]data2;
  assign data1 = (data & m1) + ({data[0],data[7:1]} & m1);  assign data2 = (data1 & m2) + ({data1[1:0],data1[7:2]} & m2);  assign number = (data2 & m3) + ({data2[3:0],data2[7:4]} & m3);endmodule

(2)仿真代碼

module tst_find_number1();  reg [7:0]data;  wire [7:0]number;  
  find_number1 u1(  .data  (data),  .number (number)    );
  initial begin  data = 8'b11010100;  end
endmodule

 

上面的解法并非最優(yōu),僅給大家提供一種思路。如果大家有更好的寫(xiě)法,歡迎與小編交流。大家對(duì)文章中的內(nèi)容如果有疑問(wèn),歡迎留言,我們看到了會(huì)給大家解答的。也歡迎大家加入下面的qq群或者添加IC媛加入微信群進(jìn)行討論交流!

 

平頭哥

平頭哥

平頭哥半導(dǎo)體有限公司于2018年9月宣布成立,是阿里巴巴集團(tuán)的全資半導(dǎo)體芯片業(yè)務(wù)主體。平頭哥擁有端云一體全棧產(chǎn)品系列,涵蓋數(shù)據(jù)中心人工智能芯片、處理器IP授權(quán)等,實(shí)現(xiàn)芯片端到端設(shè)計(jì)鏈路全覆蓋。

平頭哥半導(dǎo)體有限公司于2018年9月宣布成立,是阿里巴巴集團(tuán)的全資半導(dǎo)體芯片業(yè)務(wù)主體。平頭哥擁有端云一體全棧產(chǎn)品系列,涵蓋數(shù)據(jù)中心人工智能芯片、處理器IP授權(quán)等,實(shí)現(xiàn)芯片端到端設(shè)計(jì)鏈路全覆蓋。收起

查看更多

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫(xiě)文章/發(fā)需求
立即登錄

公眾號(hào):IC媛; IC學(xué)姐,致力于分享數(shù)字IC知識(shí) | 求職經(jīng)驗(yàn) | 職場(chǎng)生活 | 招聘信息,快樂(lè)學(xué)習(xí),共同進(jìn)步!

浮山县| 湖南省| 赤壁市| 如东县| 周宁县| 图们市| 隆昌县| 沂水县| 平顶山市| 应用必备| 静安区| 天峨县| 汉寿县| 贡觉县| 永州市| 卓尼县| 凉山| 石渠县| 栾川县| 稷山县| 公主岭市| 遵义县| 碌曲县| 绥德县| 永寿县| 盘山县| 文安县| 红安县| 梧州市| 措勤县| 开鲁县| 大埔县| 新丰县| 四平市| 曲麻莱县| 寿阳县| 河北区| 霍州市| 彰化市| 白水县| 西乌|