乐鑫笔试题C语言,乐鑫科技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 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 <

}           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) beginif(reset_n == 0) checksum <=8'b0;else checksum <= buff[0];endassign 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/1nsmodule 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 beginclk = 0;

reset_n = 0;

#20 reset_n = 1;

#10 value = 60;endendmodule

modelsim仿真:

可以看到,是在一个时钟周期完成的

8ad2f61e0c83eb1b3b0fbf27555c973c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值