FPGA_SM4
                                
                                 FPGA_SM4 copied to clipboard
                                
                                    FPGA_SM4 copied to clipboard
                            
                            
                            
                        FPGA implementation of Chinese SM4 encryption algorithm.
FPGA implementation of Chinese SM4 encryption algorithm.
Introduction
This project is an implementation of Chinese SM4 (also known as sms4) encryption algorithm.
Features
- Pipeline architecture,
- 128-bit datapath,
- following algorithms are supported:
- key expansion
- Encryption
- Decryption
 
Architecture

Interface

| Interface | direction | width | description | 
|---|---|---|---|
| clk | in | 1-bit | clock signal | 
| resetn | in | 1-bit | reset signal, 0 reset | 
| sm4_enable_in | in | 1-bit | enable sm4 core to work | 
| encdec_sel_in | in | 1-bit | select of encryption or decryption | 
| enable_key_exp_in | in | 1-bit | enable key expansion for sm4 | 
| user_key_valid_in | in | 1-bit | valid signal of user key | 
| user_key_in | in | 128-bit | 128-bit user key | 
| encdec_enable_in | in | 1-bit | enable encryption to work | 
| valid_in | in | 1-bit | valid signal of plain text | 
| data_in | in | 128-bit | plain text, 128-bit, 16 Bytes | 
| key_exp_ready_out | out | 1-bit | ready signal of key expansion | 
| ready_out | out | 1-bit | ready signal of encryption result | 
| result_out | out | 128-bit | encryption result | 
Timing

Timing diagram is edited by WaveDrom
{signal: [
  {name: 'clk', wave: 'p.....................|.'},
  {name: 'resetn', wave: '01....................|.'},
  {name: 'sm4_enable_in', wave: '0.1...................|.'},
  {name: 'encdec_sel_in', wave: '0.1...................|.'},
  {name: 'enable_key_exp_in', wave: '0..1..................|.'},
  {name: 'user_key_valid_in', wave: '0....10...............|.'},
  {name: 'user_key_in', wave: 'x....3x|..............|.',data:["Key"]},
  {name: 'key_exp_ready_out', wave: '0......|1.............|.'},
  {name: 'valid_in', wave: '0........|101010......|.'},
  {name: 'data_in', wave: 'x........|4x4x4x......|.', data:["Plain 1", "Plain 2", "Plain 3"]},
  {name: 'ready_out', wave: '0........|.....|101010|.'},
  {name: 'data_in', wave: 'x........|.....|5x5x5x|.', data:["Cpiher 1", "Cpiher 2","Cpiher 3",]},   
],
   config : { "hscale" : 2 }
}
FPGA resource utilization

FPGA Power Report

FPGA Timing Report
The period of clock is set to 2ns.
