樂鑫科技2020秋招筆試題——數字IC


原題:

請將下面這段 C 語言描述的串行處理過程,轉換為單拍完成的並行處理,並用可綜合的 Verilog 來描述。

unsigned char cal_table_high_first(unsigned char value) 

{

     unsigned char i; 

     unsigned char checksum = value;

          for (i=8; i>0; --i)  

            { 

                if (checksum & 0x80)

                        checksum = (checksum << 1) ^ 0x31;

                else

                        checksum = (checksum << 1);

            }

           return checksum;

}

c語言版答案驗證:

#include <stdio.h>
unsigned char cal_table_high_first(unsigned char value) 
{
     unsigned char i; 
     unsigned char checksum = value;
          for (i=8; i>0; --i)  
            { 
                if (checksum & 0x80)
                        checksum = (checksum << 1) ^ 0x31;
                else
                        checksum = (checksum << 1);
            }
           return checksum;
}
int main(void)
{
   /* 我的第一個 C 程序 */
   printf("%x",cal_table_high_first(60));
   getch();
}
//輸出為:b8

Verilog描述:

module question_1(reset_n,clk,value,checksum);

input wire reset_n,clk;
input wire [7:0] value;
output reg [7:0] checksum;

wire[7:0] buff[8:0];

always@(posedge clk,negedge reset_n) begin
if(reset_n == 0) checksum <=8'b0;
else checksum <= buff[0];
end

assign buff[8]=value;
assign buff[7]=(buff[8]&8'h80)?(buff[8]<<1)^8'h31:(buff[8]<<1);
assign buff[6]=(buff[7]&8'h80)?(buff[7]<<1)^8'h31:(buff[7]<<1);
assign buff[5]=(buff[6]&8'h80)?(buff[6]<<1)^8'h31:(buff[6]<<1);
assign buff[4]=(buff[5]&8'h80)?(buff[5]<<1)^8'h31:(buff[5]<<1);
assign buff[3]=(buff[4]&8'h80)?(buff[4]<<1)^8'h31:(buff[4]<<1);
assign buff[2]=(buff[3]&8'h80)?(buff[3]<<1)^8'h31:(buff[3]<<1);
assign buff[1]=(buff[2]&8'h80)?(buff[2]<<1)^8'h31:(buff[2]<<1);
assign buff[0]=(buff[1]&8'h80)?(buff[1]<<1)^8'h31:(buff[1]<<1);

endmodule

Verilog描述的測試文件:

`timescale 1ns/1ns
module question_1_t();

reg clk,reset_n;
reg [7:0] value;
wire [7:0] checksum;

question_1 U1 (reset_n,clk,value,checksum);

always #5 clk=~clk;

initial begin
clk = 0;
reset_n = 0;
#20 reset_n = 1;
#10 value = 60;
end

endmodule

modelsim仿真:

可以看到,是在一個時鍾周期完成的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM